即使在通过“通过 CakePHP 中的 belongsTo 表指定订单参数”进行挖掘之后,我似乎也无法对属于存储在另一个表中的实体的表中的条目进行排序。
本质上,我有一个教程模型,它有很多练习。每个练习都属于教程(当然),也属于一个练习类别。当我设置 recursive = 2 并找到一个给定的教程时,我想返回一个练习行列表,首先按 ExerciseCategory.title 排序,然后按 Exercise.sequence_number 排序。
所以这是我的问题: 我的好主意/骇人听闻的想法是根据原始的 exercise_category_id 对查询结果进行排序,如下所示:
class Exercise extends AppModel {
public $belongsTo = array(
'Tutorial',
'ExerciseCategory'
);
public $order = array( 'exercise_category_id' => 'ASC', // <=========
'sequence_number' => 'ASC'); // <=========
我也不明白为什么这不起作用。它产生以下 SQL 查询:
SELECT `Exercise`.`id`, `Exercise`.`exercise_category_id`,
`Exercise`.`tutorial_id`, `Exercise`.`sequence_number`,
`Exercise`.`body`
FROM `Tutorial`.`exercises` AS `Exercise`
WHERE `Exercise`.`tutorial_id` = (1)
根据 CakePHP 文档,查询中似乎应该有一个 ORDER BY 子句,但没有。
我需要做什么才能获得按锻炼类别 ID 编号排序的练习行,以便按照我想要的方式对它们进行分组?
“通过 CakePHP 中的BelongsTo 表指定订单参数”建议像这样设置Exercise.php 模型文件:
class Exercise extends AppModel {
public $belongsTo = array(
'Tutorial',
'ExerciseCategory' =>
array(
'order' => array('ExerciseCategory.title'=>'asc', 'Exercise.sequence_number' => 'asc'))
);
但这会产生错误的 SQL 查询:
SELECT `ExerciseCategory`.`id`, `ExerciseCategory`.`explanation`,
`ExerciseCategory`.`title`
FROM `Tutorial`.`exercise_categories` AS `ExerciseCategory`
WHERE `ExerciseCategory`.`id` = 2
ORDER BY `ExerciseCategory`.`title` asc, `Exercise`.`sequence_number` asc
问题(正如 CakePHP 有用地指出的那样)是 CakePHP 没有在查询中包含练习表。
编辑: 这是实际生成各种查询的代码:
$this->Tutorial->recursive = 2;
$this->Tutorial->Chapter->unbindModel(array('hasMany' => array('Tutorial')));
$this->Tutorial->Exercise->unbindModel(array('belongsTo' => array('Tutorial')));
$this->Tutorial->Section->unbindModel(array('belongsTo' => array('Tutorial')));
$tut = $this->Tutorial->findById($id);