Проблема модельных отношений в Laravel

Проблема модельных отношений в Laravel

23.12.2019 08:51:01 Просмотров 31 Источник

Я изучаю модель взаимоотношений в Ларавеле. У меня возникла следующая проблема:

У меня есть таблица для 'NPIData' с первичным ключом в качестве NPI

У меня есть таблица для "пользователей" с первичным ключом в качестве идентификатора

У меня есть таблица 'UserToProviderMapping' с двумя столбцами, один за функция user_id (карты на ID в таблице пользователей) и один для provider_npi (карты НПИ по NPIData таблицу).

У меня есть следующий код в моем контроллере:

    public function index()
{
    //
    $user = Auth::id();
    $providers = UserToProviderMapping::where('user_id', $user)->get();

    return view ('my-health-hub', compact('providers'));
}

У меня есть следующий код в моем представлении в настоящее время (очевидно, неполный)

@foreach($providers as $provider)

 <li>{{$provider->provider_npi}}</li>

@endforeach

Я не уверен, что могу использовать здесь связь модели, потому что я добавил еще одну таблицу между двумя моделями (users и NPIData). Я пытаюсь получить provider_npi из таблицы UserToProviderMapping и использовать его для поиска данных в таблице NPIData и выполнения цикла.

У вопроса есть решение - Посмотреть?

Ответы - Проблема модельных отношений в Laravel / Model Relationship issue in Laravel

Является ответом!
Hafez Divandari

23.12.2019 09:12:13

Отношения "многие ко многим" -это то, что вы ищете:

Определение providers способом на User модель, как это:

class User extends Model
{
    /**
     * The providers that belong to the user.
     */
    public function providers()
    {
        return $this->belongsToMany(
            'App\NPIData', 
            'user_to_provide_mappings', // the table name of the relationship's joining table (pivot table)
            'user_id',                  // the foreign key name of the model (on the pivot table) on which you are defining the relationship
            'provider_npi',             // the foreign key name of the model (on the pivot table) that you are joining to
            'id',                       // the primary key name of the model on which you are defining the relationship
            'NPI'                       // the primary key name of the model that you are joining to
        );
    }
}

Затем на вашем контроллере:

use Illuminate\Http\Request;

public function index(Request $request)
{
    $providers = $request->user()->providers()->get();

    return view('my-health-hub', compact('providers'));
}

Необязательно : вы можете определить свою пользовательскую промежуточную модель UserToProviderMappingкак описано в документации: https://laravel.com/docs/master/eloquent-relationships#defining-custom-intermediate-table-models

Закрыть X