Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Доброго времени суток, уважаемые форумчане.
Строю запрос фильтра
//формирование запроса по фильтру
$query = Profile::query();
//учитываем пакет
if ($request->input('pack') && $request->input('pack') != 0) {
$query = $query->where('company_pack', '=', $request->input('pack'));
}
//учитываем квалификацию
if ($request->input('qualification') && $request->input('qualification') != 0) {
$query = $query->where('company_status', '=', $request->input('qualification'));
}
//учитываем логин в компании
if ($request->input('login') && count($request->input('login')) > 0) {
$query = $query->where('company_login', 'like', '%'.$request->input('login').'%');
}
// etc...
так в одном из селектов формы мне надо найти записи головной таблицы, для которых отсутствуют связанные записи дочерней…
{!!Form::select('video_meeting', array(
'0' => 'Не важно',
'2' => 'Посмотрел 2 видео',
'1' => 'Посмотрел только 1ое видео',
'3' => 'Не смотрел видео вообще',
), 0)!!}
//по просмотру видео
if($request->input('video_meeting') && $request->input('video_meeting') !== Null && $request->input('video_meeting') !== 0){
$video_meeting = $request->input('video_meeting');
if($video_meeting == 1){ //Посмотрел только 1ое видео
$query = $query->join('videos', function ($join) {
$join->on('videos.user_id', '=', 'profiles.user_id')
->where('video1', '=', '100')
->where('video2', '=', '0');
});
}
if($video_meeting == 2){ //Посмотрел все видео
$query = $query->join('videos', function ($join) {
$join->on('videos.user_id', '=', 'profiles.user_id')
->where('video2', '=', '100');
});
}
if($video_meeting == 3){ //Не смотрел видео вообще
//надо проверить отсутствие записей
}
}
Вопрос: можно ли это сделать leftJoin
Изменено Dzhangar (31.05.2017 15:23:08)
Не в сети
на моделях нежелательно использовать джойны и группировки – приводит к непонятным глюкам. если нужна связанная модель – надо запрашивать через with. если нужно условие по связанной модели с определёнными свойствами – надо использовать whereHas.
Не в сети
На сколько я вас понял, constb, вы предлагаете:
1. Создать отношение между моделями
2. использовать метод whereHas к отношению...
однако, данный метод возвращает имеющиеся exists-записи...
Как я могу ее приткнуть к обратной проверке? whereNotHas???
Не в сети
whereDoesntHave конечно же. вообще по выборки с условиями на связанных моделях лучше прочитать раздел в документации, там всё кратко, по делу и с примерами: https://laravel.com/docs/5.4/eloquent-r … -relations
Не в сети
Страницы 1