CakePHP:查找“组”,其中该组的“成员”不是当前的授权用户

时间:2014-02-18 11:03:59

标签: php cakephp models

我有一个群组模型和一个用户模型。

群组拥有并属于许多用户。 用户拥有并属于许多组。

我正在尝试创建组的结果集,其中组用户不包含当前登录用户的ID。我试图在“包含”参数中使用条件,我尝试使用内部联接,但结果总是出现用户当前所属的组。

没有做我自己的自定义MySQL查询,我想知道是否有办法我可以独家使用CakePHP模型。

我尝试过的例子:

$otherMatches = $this->Group->find('all', array('joins' => array(array('table' => 'cake_users_groups', 'alias' => 'GroupsUsers', 'type' => 'inner', 'conditions' => array('GroupsUsers.group_id !=' => $groupId, 'GroupsUsers.user_id !=' => $this->Auth->user('id')))), 'limit' => 10, 'order' => array('rand()')));

$otherMatches = $this->Group->find('all', array(
    'contain' => array(
        'User' => array(
            'UsersGroup' => array(
                'conditions' =>  array('UsersGroup.user_id !=' => $this->Auth->user('id));
            )
        )
    )
), 'limit' => 10, 'order' => array('rand()')));

有人能给我任何建议吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

使用子查询解决它:

$conditionsSubQuery['`UsersGroup`.`user_id`'] = $this->Auth->user('id');

    $db = $this->UsersGroup->getDataSource();
    $subQuery = $db->buildStatement(
            array(
                'fields'     => array('`UsersGroup`.`group_id`'),
                'table'      => $db->fullTableName($this->UsersGroup),
                'alias'      => 'UsersGroup',
                'limit'      => null,
                'offset'     => null,
                'joins'      => array(),
                'conditions' => $conditionsSubQuery,
                'order'      => null,
                'group'      => null
            ),
            $this->UsersGroup
        );
        $subQuery = ' `Group`.`id` NOT IN (' . $subQuery . ') ORDER BY RAND() LIMIT 10 ';
        $subQueryExpression = $db->expression($subQuery);

        $conditions[] = $subQueryExpression;

        $otherMatches = $this->Group->find('all', compact('conditions'));