2

おはようございます、

$hasOne は正常に動作しますが、$hasMany に問題があります。

Assignment と AssignmentGroup の 2 つのモデルがあります。Assignment は 1 つの 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);

$hasMany の代わりに $hasOne を使用すると、期待どおりの結果が得られます。

$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 に答える