Разработка базы данных красноречивая проблема с запросом - PullRequest
0 голосов
/ 06 сентября 2018

Мне нужно создать приложение, которое будет управлять футбольными листами

У меня есть таблица, в которой хранится матч с обеими командами

match :
-id
-dt_math
-club_home_id
-club_visitor_id

у каждой команды есть лист для составления списка игроков.

Итак, что я сделал, я создал таблицу match_sheet для хранения обоих листов из команд.

match_sheet :
-id
-match_id

для хранения игроков на каждом листе, я создал таблицу match_sheet_player

match_sheet_player:
-id
-match_sheet_id
-player_id

Теперь мне нужно отображать только те совпадения, у которых оба листа на мой взгляд. и я не знаю, как этого добиться.

Первый мой запрос:

  $matchs_sheets = MatchSheet::all();

    $matchs = Match::whereIn('id', $matchs_sheets->pluck('match_id'))->orderByDesc('dt_match')->paginate(5);

Но это возвращает мой матч, даже если есть один лист, но не оба листа. мне действительно нужно показать матч только если есть два листа.

Обновление:

вот мои данные для math_sheet с 1659 существует две записи. 1659 - это идентификатор матча. поэтому я хотел бы показать только матч 1659, а не 1649, потому что для этого матча есть только одна запись enter image description here

1 Ответ

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

Предполагая, что ваши отношения с моделью установлены правильно, вы можете попросить Laravel получить совпадения только в том случае, если у связанной модели есть счет как минимум 2, используя has(). Например:

$matches = Match::whereIn('id', $ids)->has('matchSheet', '=', 2)...

Ваши отношения должны быть настроены как, например. это:

// on Match model
public function matchSheets()
{
    return $this->hasMany(MatchSheet::class);
}

// on MatchSheet model
public function match()
{
    return $this->belongsTo(Match::class);
}

Документы здесь: https://laravel.com/docs/5.6/eloquent-relationships#one-to-many - я очень рекомендую прочитать их, в конечном итоге они сэкономят вам огромное количество времени!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...