Рассмотрим этот код:Laravel Eloquent -> с() и -> выберите() конфликт друг с другом
Articles
::select('article_id', 'article_text') //This one does not work as expected
->with([
'user' => function($q){
$q->select('user_id', 'user_name'); // This one works fine
}
])
->get();
При создании запроса в красноречивых, мы можем использовать -> с(), чтобы извлечь ассоциируемых моделей. Мы также можем присоединить -> select(), чтобы определить, какие столбцы следует выбирать из связанной модели. Однако похоже, что мы теряем возможность указывать, какие столбцы следует выбирать из базовой модели, которую мы запрашиваем.
В этом примере, из-за первого ::select
, окончательные результаты, возвращаемые не включают user
, потому что он не включен в список ::select
. Если я включу его там, то он выдает ошибку около column not found
. Красноречивый не достаточно умен, чтобы понять, что я имею в виду отношения, а не столбцы.
Можно ли указать, какие столбцы должны быть возвращены от user
, а также от article
?
Ваше предположение немного неверно. Не имеет значения, что в первом 'select' нет' пользователя'. Это два отдельных запроса, поэтому на самом деле не имеет значения, что вы выбираете, если вы включите все задействованные ключи (ПК, FK) - как уже говорило @lagbox. –