Почему $ registrationDetails показывает пустую коллекцию вместо коллекции с 2 элементами? - PullRequest
0 голосов
/ 08 июня 2018

Хочу получить участников, связанных с регистрацией, с идентификатором «2».Но с кодом ниже:

dd($registrationID); // shows "2".

$registrationDetails = Registration::with([
    'participants' => function ($query) use ($registrationID) {
        $query->select('id', 'ticket_type_id')->where('registration_id', $registrationID);
    }
])->find($registrationID);

dd($registrationDetails);

появляется пустая коллекция:

Registration {#286 ▼
  #relations: array:1 [▼
    "participants" => Collection {#106 ▼
      #items: []
    }
  ]
...
}

Но в таблице участников есть 2 записи, где registration_id = 2.

DoВы знаете, где проблема?Почему возвращает пустую коллекцию, а не коллекцию с 2 элементами?

С помощью select () уже работает:

 $registrationDetails = Registration::with([
        'participants' => function ($query) use ($registrationID) {
            $query->select()->where('registration_id', $registrationID);
        }
    ])->find($registrationID);

При использовании только select () отображается элемент, связанный с регистрацией:

Registration {#264 ▼
...
  #relations: array:1 [▼
    "participants" => Collection {#266 ▼
      #items: array:1 [▶]
    }
  ]
}

1 Ответ

0 голосов
/ 08 июня 2018

Когда ваши отношения в модели Registration определены следующим образом:

public function participants()
{
    return $this->hasMany(Participant::class);
}

, вам не нужно использовать этот дополнительный запрос.Простой Registration::with('participants')->find($id) сделает это.Только участники с правильным registration_id будут выбраны из-за определения отношений.

Но если вы хотите остаться со своим сложным кодом, причина может быть в том, что вы также не выбрали registration_id.Без этого механизм запросов Eloquent не может найти источник для участников, который является вашей регистрацией.Поэтому просто используйте следующее для внутреннего запроса:

$query->select('id', 'ticket_type_id', 'registration_id')->where('registration_id', $registrationID);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...