在 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 的文档)。
我有一个连接 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 的文档)。