如何从关系中获取随机数据以及groupby?

时间:2019-05-22 15:21:43

标签: laravel

我有vehicles表与vehicle_Modelvehicle 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 个答案:

答案 0 :(得分:1)

您的->pluck('id')->take(3)的顺序可能不正确。您也没有使用->get()来完成查询。

->pluck()是一种收集方法,一旦返回收集对象,便在雄辩查询完成后 使用。要选择要之前完成查询的字段,您应该可以使用->select()

但是,要解决您的问题,

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

这应该返回一个包含3个随机模型id的数组,以供您在其他查询中使用。 ->all()用于将集合对象转换为数组。

您需要从此处删除->whereIn(),因为它是根据Vehicle而不是VehicleModel检查的。您可以像这样扩展->with()调用:

...

->with(['vehicleModel' => function ($query) use ($models) {
    $query->whereIn('id', $models);
}, 'vehicleModel.vehicleVendor'])

...

这只会添加id数组中包含$models的车辆模型。

我希望这会有所帮助。

答案 1 :(得分:0)

找到了解决方案,而不是通过vehicle_model_id的工作循环来使用分组

$vehicles = [];

foreach($models as $model){

$vehicles = Vehicle::where('vehicle_model_id',$model)->with(['vehicleModel','vehicleModel.vehicleVendor'])->inRandomOrder()->first();
}