Laravel 5.2获取与whereIn()中相同排序的记录

时间:2016-04-16 12:51:10

标签: php laravel eloquent laravel-5.2

我有这个带有记录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订购"?感谢。

2 个答案:

答案 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进行切片,将其用作偏移量和限制,然后在查询运行后对返回的集合进行排序。