我有一个群组模型和一个用户模型。
群组拥有并属于许多用户。 用户拥有并属于许多组。
我正在尝试创建组的结果集,其中组用户不包含当前登录用户的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()')));
有人能给我任何建议吗?
提前致谢。
答案 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'));