Laravel Eloquent - Массив во вложенном отношении, как его назначить? - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть игровая база данных, в которой у матча есть две команды (team_home_id и team_away_id).Пользователи могут делать прогнозы для этих игр.

Таким образом, модель Match имеет следующее:

public function teamHome()
{
    return $this->belongsTo(Team::class, 'team_home_id');
}

public function teamAway()
{
    return $this->belongsTo(Team::class, 'team_away_id');
}

Я хочу получить все прогнозы от конкретного пользователя для этого матча.Модель прогнозирования имеет полиморфную таблицу (потому что есть прогнозы на совпадение и прогнозы на весь сезон).

В контроллере я делаю это:

        $matches = Match::where('match_day', $match_day)->with('teamHome', 'teamAway', 'predictions')->get();

foreach ($matches as $match) {

    echo $match->teamHome->code . '-';
    echo $match->teamAway->code . '  ';
   // echoing is just for testing purpose
    //dd($match->predictions); // this is the problem, what is the best way?
}

Я получил массив с прогнозами, которыеЯ не могу назначить конкретному пользователю или только с помощью foreach вручную и назначить его другому массиву.Но я не думаю, что это был бы хороший способ.

Как я могу решить эту проблему?

Заранее спасибо.

1 Ответ

0 голосов
/ 28 сентября 2019

Есть несколько способов решить вашу проблему.Это всего лишь одно:

Вы можете использовать ограниченную энергичную нагрузку, то есть «приносить только прогнозы от пользователя X».

$matches = Match::where('match_day', $match_day)
   ->with('teamHome', 'teamAway')
   ->with(['predictions' => function($prediction) use($userId){
      $prediction->where('user_id', '=', $userId);
   }])
   ->get();

Источник

...