与 Laravel 中的 table 相关的排序

Ordering by related to table in Laravel

我有一个模型(车辆)与其他 2 个模型(汽车和自行车)相关。汽车和自行车一样属于车辆。一辆车有一辆汽车或有一辆自行车。

我想对我所有的车辆进行随机排序,首先是自行车,然后是汽车。我的意思是首先随机订购所有汽车,然后随机订购所有自行车。

我必须以分页方式执行此操作,因此必须在单个查询中完成。

我所做的近似如下:按 car_id 排序(然后自行车排在第一位)但顺序始终相同,我需要在每个组中添加随机因子。

任何提示都会有所帮助。谢谢!

Union 应该有效:

$cars = Vehicle::selectRaw('*, 1 as ob')->whereNotNull('car_id');
$bikes = Vehicle::selectRaw('*, 2 as ob')->whereNotNull('bike_id');

$vehicles = $cars->union($bikes)->orderByRaw('ob, RAND()')->paginate(10);

详细了解 order when using union