我有一个与其他2个车型(汽车和自行车)相关的车型(车辆)。汽车属于车辆和自行车。一辆车有一辆车或有一辆自行车。
我想随机排序所有车辆,首先是自行车,然后是汽车。我的意思是首先随机订购所有汽车,然后随机订购所有自行车。
我必须以分页方式执行此操作,因此必须在单个查询中完成。
我所做的近似值如下:按car_id排序(然后自行车排在第一位),但顺序始终相同,我需要在每个组中添加随机因素。
任何提示都会有所帮助。谢谢!
答案 0 :(得分:1)
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);