我有这样的关联:
聊天室> -----<用户
因此,聊天室可以包含多个用户,并且用户可以属于多个聊天室。
现在我想选择所有包含几个用户的聊天室,只有这对夫妇。
我尝试了一些解决方案,例如:
public function findByUsers($firstUser, $secondUser){
$qb = $this->createQueryBuilder('c');
$qb
->select('c')
->where('c.users LIKE :firstUser')
->andwhere('c.users LIKE :secondUser')
->setParameters(array(
'firstUser' => $firstUser,
'secondUser' => $secondUser
));
return $qb->getQuery()->getResult();
}
但它不起作用,并将我返回我的错误:
[Semantical Error] line 0, col 52 near 'users LIKE :firstUser': Error: Invalid PathExpression. Must be a StateFieldPathExpression.
一些遇到此错误的用户通过在查询选择器之前添加身份来解决此问题,但我不明白如何在我的情况下应用它。
所以,有人知道我如何获得所有包含我的用户的聊天室?
非常感谢!
编辑:添加学说关系注释
user.php
/**
*
* @ORMManyToMany(targetEntity="Chatroom", inversedBy="users")
* @ORMJoinTable(name="chatrooms_users",
* joinColumns={@ORMJoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@ORMJoinColumn(name="chatroom_id", referencedColumnName="id")}
* )
*/
private $chatrooms;
chatroom.php:
/**
* @ORMManyToMany(targetEntity="User", mappedBy="chatrooms")
*/
private $users;
我的最终解决方案是:
public function findByUsers($ids)
{
$count = count($ids);
$qb = $this->createQueryBuilder('chatroom');
$qb->select('chatroom')
->join('chatroom.users', 'u')
->addSelect('COUNT(u) AS HIDDEN ucount')
->groupBy('chatroom.id')
->having('ucount = :count')
->setParameter('count', $count);
foreach ($ids as $key => $id) {
$qb->andWhere(':id' . $key . ' MEMBER OF chatroom.users')
->setParameter('id'.$key, (int) $id);
}
return $qb->getQuery()->getOneOrNullResult();
}
传递一系列用户ID(或简单使用一些修改的用户(,该功能返回包含的聊天室列表,仅这些用户