2014-09-02 203 views
1

我目前使用Criteria来过滤一组对象。但是当我想用2个orderBy字段实现时,只考虑第一个字段。我不明白。Criteria中的多个orderby

$events = new Collections\ArrayCollection($results); 
$dateFrom = new \DateTime($date); 
$dateTo = new \DateTime(date('Y-m-d H:i:s', strtotime($date . ' + 1 day'))); 

$criteria = Criteria::create() 
    ->where(Criteria::expr()->eq('activity', $activity)); 

$criteria->orderBy(array(
    "time" => "ASC", 
    "title" => "ASC" 
)); 

我怎样才能使它与两个ord​​erby字段,而不仅仅是第一个?

预先感谢您的任何答案!

+0

您发布的提供附加信息的答案已被删除,而不是合并到您的问题中,这是他们应该完成的。尽管如此,我已经相应地更新了我的答案。确保你看看! – FyodorX 2014-09-05 13:23:29

回答

0

您的代码是正确的,假设$criteria然后正确应用于ArrayCollection

根据您试图订购的字段名称判断,有可能title不会影响订单,因为time不会在集合中的元素之间重复。

如果情况并非如此,请提供更多关于您所得结果的信息,我会更新我的答案。

更新(响应提供了额外的数据已被删除):

正确排序的集合。问题是,你然后将ArrayCollection送入Paginator,这显然不能被一个以上的字段排序。

在Knp的跟踪器中存在一个这样的问题:https://github.com/KnpLabs/KnpPaginatorBundle/issues/109