Проблема модельных отношений в Laravel
Я изучаю модель взаимоотношений в Ларавеле. У меня возникла следующая проблема:
У меня есть таблица для '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

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