我有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');
答案 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();
}