как получить случайные данные вместе с групповым из отношений? - PullRequest
0 голосов
/ 22 мая 2019

У меня есть vehicles таблица, которая имеет отношение к vehicle_Model и vehicle vehicle_vendor таблице.

Теперь я хочу генерировать только 3 случайных строки / кортежа при каждом обновлении страницы.

Я уже пробовал это, но при использовании ->groupBy() он не генерирует случайные данные.

$models = VehicleModel::has('vehicle')->inRandomOrder()->pluck('id')->take(3);

return Vehicle::has('vehicleModel')->has('vehicleModel.vehicleVendor')->whereIn('vehicle_model_id',$models)->with(['vehicleModel','vehicleModel.vehicleVendor'])->inRandomOrder()->take(3)->groupBy(['vehicle_model_id',])->get()->pluck('id');

Ответы [ 2 ]

1 голос
/ 22 мая 2019

У вас могут быть ->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.

Надеюсь, это поможет.

0 голосов
/ 23 мая 2019

нашел решение вместо использования группы путем циклического перебора всех транспортных средств_модель_ид работает

$vehicles = [];

foreach($models as $model){

$vehicles = Vehicle::where('vehicle_model_id',$model)->with(['vehicleModel','vehicleModel.vehicleVendor'])->inRandomOrder()->first();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...