Я пытался решить эту проблему в течение 3 дней, но не нашел решения.Laravel - как использовать whereHas с условными отношениями?
У меня есть условное отношение один-к-одному между таблицей пользователей и их профили admin_profile, teacher_profile, student_profile и company_pofile
отношения в пользовательской модели выглядит следующим образом:
function profile() {
switch ($this -> type) {
case 'other':
return $this -> hasOne('App\AdminProfile');
break;
case 'company':
return $this -> hasOne('App\CompanyProfile');
break;
case 'teacher':
return $this -> hasOne('App\TeacherProfile');
break;
case 'student':
return $this -> hasOne('App\StudentProfile');
break;
}
}
И как это условно, нетерпевая загрузка не будет работать до того, как я назову метод «получить» или один из его братьев и сестер. так что я использовал «нагрузку», чтобы получить профиль пользователя так:
function getUser($id) {
$user = User::find($id) -> load('profile');
return response() -> json($user);
}
Теперь проблема заключается в том, что я хочу, чтобы искать пользователей по данным в их профилях, так что я сделал это:
if($request -> has('filter')) {
$users -> whereHas('profile', function ($q) use($request) {
$filter = explode($request -> filter, ',');
$q -> where ($filter[0], @$filter[1]);
});
}
и, конечно, из-за условной связи, жадная загрузка не будет работать, а вот сообщение об ошибке:
FatalErrorException в Builder.php линии 580: Вызов функции-члена getRelationCountQuery() на нуль
Спасибо за ваш ответ, я думаю, теперь я застрял, потому что я сделал много функциональных возможностей на основе «профиль». Однако я думал, что полиморфные отношения используются для отношений «один-много и много-много», верно? – Salahuddin