我有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');
您的->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'])
...
这将仅添加具有$models
数组中包含的id
的车辆模型。
我希望这有所帮助。
找到了解决方案,而不是通过循环使用组vehicle_model_id工作
$vehicles = [];
foreach($models as $model){
$vehicles = Vehicle::where('vehicle_model_id',$model)->with(['vehicleModel','vehicleModel.vehicleVendor'])->inRandomOrder()->first();
}