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



我有vehiclesvehicle_Modelvehiclevehicle_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();
}

最新更新