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' => ''
    )
);

设置了条件字段,以便仅从数据库中获取活动的用户,我收到错误:SQLSTATE [42S22]:找不到列:1054 SQL 的“where 子句”中的未知列“User.active”询问:

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

尽管这个问题已经很老了,但我最近遇到了同样的问题并想记录我的解决方案。在上面的示例中,我必须执行一个简单的子查询来获取关联字段,而不是引用用户,如下所示:

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 回答