我有一个连接2个表的CakePHP 2(版本2.10.5)查询,假设我在Model1上查询并加入Model2和Model3。我想通过Model2.field_1和Model3.field_2订购我的数据。
当我使用这种方式时:
'order' => ['Model2.field_1', 'Model3.field_2']
或者这样:
'order' => ['Model2.field_1' => 'ASC', 'Model3.field_2' => 'ASC']
只有Model2.field_1被添加到查询的订单部分。
当我使用这种方式时:
'order' => 'Model2.field_1, Model3.field_2'
这两个字段都被添加到查询的订单部分,引用它们以及CakePHP正确解释它们的所有内容。
这是为什么?什么是正确的方法?
答案 0 :(得分:1)
前两个示例应该是在CakePHP 2中使用order
的正确方法。您可以在Retrieving Your Data下的官方文档中找到使用order
的示例。
所以你应该使用: -
'order' => ['Model2.field_1', 'Model3.field_2']
或者: -
'order' => ['Model2.field_1' => 'ASC', 'Model3.field_2' => 'ASC']
两者都会被解释为相同。 documentation for Models明确描述了order
的可用格式。
我怀疑如果这些在您的查询中不起作用,那么此处未显示另一个问题。我相信,当Cake生成查询时,它将忽略与查询无关的订单语句。例如,如果您尝试在多个contain
上进行排序,或者您正在使用分页并尝试对尚未正确配置的列进行排序(请参阅pagination ordering的文档)。< / p>