在 CakePHP 2 中定义顺序的正确方法

Correct way to define order in CakePHP 2

我有一个连接 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 正确解释它们的所有内容。

这是为什么?正确的方法是什么?

您的前两个示例应该是在 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 的文档)。