#php #laravel #model-view-controller #laravel-query-builder
#php #laravel #model-view-controller #laravel-конструктор запросов
Вопрос:
таблица совпадений имеет связь с таблицей результатов.
Мне нужно получить все совпадения без записи в таблице результатов.
попробовал что-то, но не сработало:
$upcomingMatch = Match::join('scores', 'matches.id', '=', 'scores.match_id')
->where('away_team_id', '=', '1')
->orWhere('home_team_id', '=', '1')
->where('scores.match_id', null)
->latest('matches.match_date')
->first();
Комментарии:
1. Есть ли у вас налаженные отношения между ними? если это так, ознакомьтесь с
doesntHave
методом2. Я полностью согласен с @lagbox, если у вас есть настройка отношений, то doesnHave — это стандартное и простое решение здесь. laravel.com/docs/8.x /…
Ответ №1:
Если вы используете relationship, вы можете использовать doesntHave()
, но если вы используете query builder, как вы пишете в своем вопросе, вы можете использовать эти коды, я видел, что ваше условие where нуждается в некоторой корректировке для использования вложенного условия. Если вы хотите получить нулевую запись, затем используйте whereNull
в scores
таблице, которая не является ключом связи с matches
таблицей, в этом примере я использую scores.id
Получить matches
значение, равное нулю (использовать leftJoin
с некоторым дополнительным условием)
$upcomingMatch = Match::leftjoin('scores', 'matches.id', '=', 'scores.match_id')
->where(function ($where)
{
$where->where('matches.away_team_id', '=', '1')
->orWhere('matches.home_team_id', '=', '1');
})
->whereNull('scores.id')
->latest('matches.match_date')
->first();
Ответ №2:
Попробуйте:
$upcomingMatch = Match::join('scores', 'matches.id', '=', 'scores.match_id')
->where('away_team_id', '=', '1')
->orWhere('home_team_id', '=', '1')
->whereNull('scores.match_id')
->latest('matches.match_date')
->first();