0

定義するときにCakephpに問題があります

public $hasAndBelongsToMany = array(
    'User' => array(
        'className' => 'User',
        'joinTable' => 'groups_users',
        'foreignKey' => 'group_id',
        'associationForeignKey' => 'user_id',
        'unique' => 'keepExisting',
        'conditions' => 'User.active=1',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'finderQuery' => '',
        'deleteQuery' => '',
        'insertQuery' => ''
    )
);

条件フィールドが設定されているため、アクティブなユーザーのみがDBからフェッチされ、エラーが発生します: SQLSTATE[42S22]: 列が見つかりません: 1054 Unknown column 'User.active' in 'where clause' for the SQLクエリ:

SELECT `GroupsUser`.`user_id` FROM `groups_users` AS `GroupsUser` WHERE  `GroupsUser`.`group_id` = 123 AND `User`.`active`=1

明らかに、結合テーブルから結果をフェッチするだけだからです。だから私はここで見つけました:http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#hasandbelongstomany-habtm条件の説明で。

条件: find() 互換条件または SQL 文字列の配列。関連付けられたテーブルに条件がある場合は、「with」モデルを使用し、必要な belongsTo 関連付けを定義する必要があります。

「with」モデルとは何ですか?どのように実装しますか?

よろしくお願いします!

4

1 に答える 1

1

この質問はかなり古いものですが、最近同じ問題に遭遇し、解決策を文書化したいと思いました。上記の例では、User を参照する代わりに、次のような関連フィールドを取得するために単純なサブクエリを実行する必要がありました。

public $hasAndBelongsToMany = array(
    'User' => array(
        'className' => 'User',
        'joinTable' => 'groups_users',
        'foreignKey' => 'group_id',
        'associationForeignKey' => 'user_id',
        'unique' => 'keepExisting',
        //'conditions' => 'User.active=1',
        'conditions' => array('(SELECT active FROM users WHERE users.id = GroupsUser.user_id)'=>1),
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'finderQuery' => '',
        'deleteQuery' => '',
        'insertQuery' => ''
    )
);

私の同様の例では、検索と保存が機能するようになりました。

于 2013-05-02T08:47:34.880 に答える