【问题标题】:CakePHP - success with $hasOne, failure with $hasManyCakePHP - $hasOne 成功,$hasMany 失败
【发布时间】:2012-08-24 18:06:11
【问题描述】:

早上好,

我在使用 $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(),
);

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

【问题讨论】:

标签: php cakephp cakephp-2.1 cakephp-model


【解决方案1】:

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

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

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

另外,请尝试使用 $hasMany,但将 contain 去掉,看看这是否会让您感到困惑。

【讨论】:

  • 我做了所有你建议的更改(递归 = 1),但分配数组仍然是空的。
  • 您可能还需要 foreignKey 数组中的 foreignKey 键。因为(根据本书)“此键的默认值是另一个模型的带下划线的单数名称,后缀为 _id。”但是,我注意到您的型号名称是 AssignmentGroup,但您的密钥是 assignment_group_id(带有下划线)。这可能是问题所在。
【解决方案2】:
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' ),
);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 2016-03-17
    • 1970-01-01
    • 2017-10-20
    • 2021-05-28
    • 2014-07-17
    相关资源
    最近更新 更多