У вас могут быть ->pluck('id')
и ->take(3)
в неправильном порядке. Вы также не используете ->get()
для завершения запроса.
->pluck()
- это метод сбора, используемый после завершения красноречивого запроса после возвращения объекта сбора. Чтобы выбрать, какие поля вы хотели бы получить до завершения запроса, вы можете использовать ->select()
.
Однако, чтобы решить вашу проблему:
$models = VehicleModel::has('vehicle')
->inRandomOrder()
->take(3)
->get()
->pluck('id')
->all();
Это должно вернуть массив с 3 случайными моделями id
s для использования в вашем другом запросе. ->all()
используется для преобразования объекта коллекции в массив.
Отсюда вам необходимо удалить ->whereIn()
, поскольку он проверяет Vehicle
, а не VehicleModel
. Вы можете продлить ->with()
вызов следующим образом:
...
->with(['vehicleModel' => function ($query) use ($models) {
$query->whereIn('id', $models);
}, 'vehicleModel.vehicleVendor'])
...
При этом будут добавлены только модели автомобилей с id
, содержащимися в массиве $models
.
Надеюсь, это поможет.