我有这个带有记录ID的数组:
$record_ids = [60, 66, 70, 64, 69, 67, 65, 57];
我使用模型获取行,如下所示:
$result = Model::whereIn('id', $record_ids)->get();
问题 - 我想获得与$ record_ids数组中的行相同的顺序。 Laravel按升序ID顺序返回这些行:
[57, 60, 64, 65, 66, 67, 69, 70]
怎么做?如何制作Laravel"默认情况下不按ID ASC订购"?感谢。
答案 0 :(得分:7)
您可以像{/ p>一样使用orderByRaw()
$result = Model::whereIn('id', $record_ids)
->orderByRaw("field(id,".implode(',',$record_ids).")")
->get();
答案 1 :(得分:1)
使用集合中的sortBy方法,您可以按ID数组排序。
$theIds = [2,76,423];
$collection = $collection->sortby(function($model) use ($theIds){
return array_search($model->id, $theIds);
});
可能最好对$ record_ids进行切片,将其用作偏移量和限制,然后在查询运行后对返回的集合进行排序。