2

早上好,

我在使用 $hasMany 时遇到了问题,即使 $hasOne 工作正常。

我有两个模型,Assignment 和 AssignmentGroup。Assignment 可以有一个AssignmentGroup,但AssignmentGroup 可以有多个Assignment。以下是关系:

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(),
);

谁能解释发生了什么和/或提出解决方案?谢谢您的帮助。

4

2 回答 2

1

这可能是次要的,但我始终确保className在模型定义中使用。

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

只是为了安全起见,因为这本书确实说“每个模型的别名必须是唯一的应用程序范围”,它帮助我保持这些直截了当。

另外,尝试使用$hasMany但取contain出来看看这是否会让你感到困惑。

于 2012-08-24T18:29:16.030 回答
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' ),
);
}
于 2012-08-24T19:39:11.340 回答