Выбор элементов с соединением и без внешнего ключа - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть запрос, который получает записи каждого пользователя из таблицы черного списка и связи с ними из таблицы правил.

Это выглядит так:

$result1 = DB::table('blacklist')
        ->join('rules', 'blacklist.rule_id', '=', 'rules.id')
        ->select('blacklist.*', 'rules.clicks', 'rules.minutes')
        ->groupBy('blacklist.address')
        ->where('blacklist.user_id', JWTAuth::user()->id)
        ->get();

Однако я установил для поля blacklist.rule_id значение CAN BE NULL. Вышеупомянутый запрос не получает записи с blacklist.rule_id == null (только со значениями).

У меня есть второй запрос для этой цели:

$result2 = DB::table('blacklist')
            ->select('blacklist.*')
            ->groupBy('blacklist.address')
            ->where('blacklist.user_id', JWTAuth::user()->id)
            ->where('blacklist.rule_id', null)
            ->get();

Но как это сделать за один запрос?

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

попробуйте

$result2 = DB::table('blacklist')
                ->select('blacklist.*')
                ->groupBy('blacklist.address')
                ->where(function ($result2) {
                $result2->where('blacklist.user_id', JWTAuth::user()->id)
                    ->orWhereNull('blacklist.user_id');
            }
                ->get();
0 голосов
/ 06 сентября 2018

Это на самом деле leftJoin вместо join:

$result1 = DB::table('blacklist')
    ->leftJoin('rules', 'blacklist.rule_id', '=', 'rules.id')
    ->select('blacklist.*', 'rules.clicks', 'rules.minutes')
    ->groupBy('blacklist.address')
    ->where('blacklist.user_id', JWTAuth::user()->id)
    ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...