早上好,
我在$hasMany上遇到了问题,尽管$hasOne运行良好。
我有两个模型,Assignment和AssignmentGroup。工作分配可以有一个工作分配组,但工作分配组可以有多个工作分配。以下是关系:
class Assignment extends AppModel {
public $belongsTo = array('AssignmentGroup');
}
class AssignmentGroup extends AppModel {
public $hasMany = array(
'Assignment' => array('foreignKey'=>'assignment_group_id),
);
}
这是我正在运行的代码:
$this->AssignmentGroup->Behaviors->load('Containable');
$params = array(
'conditions' => array('AssignmentGroup.class_id' => $class_id),
'contain' => array('Assignment'),
);
$result = $this->AssignmentGroup->find('all', $params);
当我使用$hasOne而不是$hasMany时,我得到了预期的结果。
$result = array(
'AssignmentGroup => array(
[several elements]
),
'Assignment' => array(
[more elements]
),
);
然而,当我需要使用$hasMany时,事情就会分崩离析。查询没有JOIN。
$result = array(
'AssignmentGroup => array(
[several elements]
),
'Assignment' => array(),
);
有人能解释发生了什么和/或提出解决方案吗?谢谢你的帮助。
这可能是次要的,但我总是确保在模型定义中使用className
。
var $hasMany = array(
'Assignment' => array(
'className' => 'Assignment',
'foreignKey' => 'assignment_group_id',
),
);
为了安全起见,因为书中确实说"每个模型的别名必须在应用程序范围内唯一",这有助于我澄清这些问题。
另外,试着使用$hasMany
,但去掉contain
,看看这是否会让你感到困惑。
class AssignmentGroup extends AppModel {
public $hasMany = array(
'Assignment' => array('foreignKey'=>'assignment_group_id),
);
}
应该是:
class AssignmentGroup extends AppModel {
public $hasMany = array(
'Assignment' => array('foreignKey'=>'assignment_group_id' ),
);
}