Использование метода whereIn () с моделью eloquent laravel - PullRequest
0 голосов
/ 04 июля 2018

Итак, у меня есть приложение laravel, которое содержит множество различных моделей, и некоторые из них зависят от других. В стандартном SQL вы должны использовать простое выражение соединения и покончить с этим. Тем не менее, Laravels Eloquent Models предлагает функции для легкого построения этих отношений (т.е. hasOne, hasMany и т. Д.). Поэтому я определил свои отношения с последним методом и фактически успешно использовал их.

В попытке использовать модель Eloquent вместе с определенными здесь связями:

 vehicle::with(['colors:id,Color', 'damages:id,Damage','secondaryDamages:id,Damage',
'modeldetails.model','modeldetails.engine_type',
'modeldetails.fuel_type','modeldetails.transmission_type',
'modeldetails.body_type','modeldetails.drive_type, 'modeldetails.model.vendor','auctionday']);

Но проблема возникает, когда я пытаюсь связать эту команду с whereIn().

     vehicle::with(['colors:id,Color', 'damages:id,Damage','secondaryDamages:id,Damage',
    'modeldetails.model','modeldetails.engine_type',
    'modeldetails.fuel_type','modeldetails.transmission_type',
    'modeldetails.body_type','modeldetails.drive_type, 'modeldetails.model.vendor','auctionday'])
->whereIn([id, $arrayofValuetoMatch]);

См. Запрос "id" для таблицы работает нормально, это когда я запрашиваю другие столбцы, принадлежащие другим таблицам, таким как 'modeldetails.model.vendor.id', что может вызвать ** ошибку для неизвестного столбца. ** если он был вместо идентификатора в whereIn()

Итак, мой вопрос: как бы я назвал параметр столбца в методе whereIn() при использовании красноречивых связей laravels. Или мне нужно использовать метод объединения, чтобы иметь доступ к этим столбцам?

Вот исходная ошибка

SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец «vehicle_makes.id» в «выражении where» (SQL: выбрать количество (*) как совокупность из vehicles, где vehicle_makes. id in (1) , 2, 3, 4, 5)).

"vehicle_makes" - это оригинальное имя таблицы, но оно не работает.

Любая помощь будет принята с благодарностью ..

1 Ответ

0 голосов
/ 04 июля 2018

Что я предполагаю из вашего вопроса, что вы хотите использовать фильтр для связанных моделей, связанных с вашей моделью, вы можете использовать whereHas() для этой цели

$vendorIds = [1, 2, 3, 4, 5];
$vehicles= vehicle::with([....])
                  ->whereHas('modeldetails.model.vendor', function ($query) use ($vendorIds) {
                        $query->whereIn('id',$vendorIds);
                  })->get();

Также см. Раздел Запрос наличия отношений

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