Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 31.05.2017 15:22:06

Проверка наличия записей в связанной таблице

Доброго времени суток, уважаемые форумчане.
Строю запрос фильтра

PHP
        //формирование запроса по фильтру
        
$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...

так в одном из селектов формы мне надо найти записи головной таблицы, для которых отсутствуют связанные записи дочерней…

PHP
 {!!Form::select('video_meeting', array(
                
'0' => 'Не важно',
                
'2' => 'Посмотрел 2 видео',
                
'1' => 'Посмотрел только 1ое видео',
                
'3' => 'Не смотрел видео вообще',
                ), 
0)!!}

В контроллере

PHP
//по просмотру видео
        
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)

Не в сети

#2 31.05.2017 15:37:18

Re: Проверка наличия записей в связанной таблице

на моделях нежелательно использовать джойны и группировки – приводит к непонятным глюкам. если нужна связанная модель – надо запрашивать через with. если нужно условие по связанной модели с определёнными свойствами – надо использовать whereHas.

Не в сети

#3 31.05.2017 15:54:45

Re: Проверка наличия записей в связанной таблице

На сколько я вас понял, constb, вы предлагаете:
1. Создать отношение между моделями
2. использовать метод whereHas к отношению...

однако, данный метод возвращает имеющиеся exists-записи...
Как я могу ее приткнуть к обратной проверке? whereNotHas???

Не в сети

#4 31.05.2017 17:00:16

Re: Проверка наличия записей в связанной таблице

whereDoesntHave конечно же. вообще по выборки с условиями на связанных моделях лучше прочитать раздел в документации, там всё кратко, по делу и с примерами: https://laravel.com/docs/5.4/eloquent-r … -relations

Не в сети

Подвал раздела