CakePHP - $ hasOne成功,$ hasMany失败

时间:2012-08-24 18:06:12

标签: php cakephp cakephp-2.1 cakephp-appmodel

早上好,

我遇到$ hasMany的问题,即使$ hasOne工作正常。

我有两个模型,Assignment和AssignmentGroup。赋值可以有一个AssignmentGroup但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(),
);

任何人都可以解释发生了什么和/或建议解决方案吗?谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

这可能很小,但我始终确保在模型定义中使用className

var $hasMany = array(
    'Assignment' => array(
        'className' => 'Assignment',
        'foreignKey' => 'assignment_group_id',
    ),
);

为了安全起见,因为本书确实说“每个模型的别名必须是独特的应用范围”,这有助于我保持这些。

另外,请尝试使用$hasMany,但只需查看contain,看看是否会让您感到困扰。

答案 1 :(得分:0)

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' ),
);
}