Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP:Find";“团体”;其中;“成员”;该组的用户不是当前授权用户_Php_Cakephp_Models - Fatal编程技术网

CakePHP:Find";“团体”;其中;“成员”;该组的用户不是当前授权用户

CakePHP:Find";“团体”;其中;“成员”;该组的用户不是当前授权用户,php,cakephp,models,Php,Cakephp,Models,我有一个组模型和一个用户模型 组拥有并属于许多用户。 用户拥有并属于许多组 我正在尝试创建一个组结果集,其中组用户不包括当前登录用户的id。我尝试在“contain”参数中使用条件,并尝试使用内部联接,但结果总是显示用户当前所属的组 除了做我自己的自定义MySQL查询之外,我想知道是否有一种方法可以专门使用CakePHP模型进行查询 我尝试过的例子: $otherMatches = $this->Group->find('all', array('joins' => array

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

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

我正在尝试创建一个组结果集,其中组用户不包括当前登录用户的id。我尝试在“contain”参数中使用条件,并尝试使用内部联接,但结果总是显示用户当前所属的组

除了做我自己的自定义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()')));

谁能给我一些建议吗


提前感谢。

使用子查询解决了此问题:

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

您只需要组,还是组和用户?您是否仅限于一个查询?只有组可以。如果有可能获得该组的用户信息,那么这将是好的,但不是必要的。不一定只限于一个查询,但希望将代码保持在尽可能小的范围内。似乎应该使用子查询。由于Cake 2.x中没有子查询,所以最快、最不“头痛”的答案可能是做2个查询OK谢谢,Eagle。这给了我一个起点。
'conditions'=>数组('UsersGroup.user\u id!='=>$this->Auth->user('id))在我看来应该有效。是因为
$this->Auth->user('id
)之后缺少一个单引号,还是在尝试时,您写得正确?
$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'));