Laravel: использование where внутри (с моделью)

#php #laravel #where-clause #has-many

#php #laravel #where-предложение #имеет-много

Вопрос:

У меня есть этот контроллер :

 public function user_predects()
{
    $matches=Match::with('Predect')->get();
    return ($matches);
}
 

и это получить данные json, как это :

 [
    {
        "id": 1,
        "m_date": "2021-02-06 22:00:00",
        "home": "Turkey",
        "away": "Italy",
        "h_goals": 0,
        "a_goals": 0,
        "predect": [
          {
            "id": 3,
            "user_id": 10,
            "match_id": 1,
            "h_predect": 1,
            "a_predect": 1,
            "player_id": 1,
            "point": 0,
            "created_at": null,
            "updated_at": null
          },
          {
            "id": 4,
            "user_id": 9,
            "match_id": 1,
            "h_predect": 2,
            "a_predect": 1,
            "player_id": 1,
            "point": 0,
            "created_at": null,
            "updated_at": null
 

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

 public function user_predects($username)
{
    $user = User::where('username',$username)->get()
    $matches=Match::with('Predect')->where('Predect.user_id',$user[0]->id)->get();

    return ($matches);
}
 

Как я могу просмотреть модель совпадений с моделью предикатов для одного пользователя?

Ответ №1:

Попробуйте это:

 public function user_predects($username)
{
    $user = User::where('username',$username)->first()
    $matches = Match::with(['Predect' => function($query) use ($user) {
        return $query->where('Predect.user_id', $user->id);
    }])->get();

    return ($matches);
}
 

Вы также можете прочитать об ограничении активной загрузки из официальной документации: ограничение активных нагрузок