使用ID数组对DataList :: get进行排序

时间:2013-06-19 19:16:13

标签: silverstripe

我正在使用包含一些ID的数组的where子句来执行DataList :: get()。

$result = DataList::get('MyObject')->where('ID IN(' .implode(',',$idArr). ')');

我的数组看起来像

array
  0 => string '1'
  1 => string '12'
  2 => string '2'
  3 => string '11'

我想要DataList的结果:get()以$ idArr的相同顺序排序/排序。我试过了

$masteries = Mastery::get()->where('ID IN(' .implode(',',$idArr). ')')->sort('ID', implode(',',$idArr));

但这不起作用。有没有办法使用DataList执行此操作,还是我必须执行自定义查询?

2 个答案:

答案 0 :(得分:7)

为了完整性,应该注意OP询问了使用DataList执行此操作的方法,因此编写此查询的ORM方式(完成标准排序行为)将是:

$masteries = Mastery::get()
    ->filter(array('ID' => $idArr))
    ->sort('ID', 'ASC'); // See the docblock for DataList::sort()

答案 1 :(得分:3)

你试过了吗?

$masteries = Mastery::get()
    ->where('ID IN(' . implode(',',$idArr) . ')')
    ->sort('field(ID,' . implode(',',$idArr) . ') ASC');