我没有为我的问题弄清楚正确的Doctrine SQL / DQL。 问题是,考虑到我是“用户1”,我需要按照以下结构列出我的ChatRoom中的所有用户。 聊天室1: 用户1 用户2 聊天室2: 用户1 用户3 聊天室3: ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
许多用户实体在注释中使用联合表具有许多房屋实体
class User
{
/**
* @ORM\ManyToMany(targetEntity="House")
* @ORM\JoinTable(name="house_user",
* joinColumns={@ORM\JoinColumn(name="user_uuid", rerencedColumnName="uuid") },
* inverseJoinColumns={@ORM\JoinColumn(name="house_uuid", ferencedColumnName="uuid") }
* }
* )
*/
public $houses;
我需要从给定用户(包括用户本身)居住的所有房屋中获得所有邻居。 我还需要得到这个邻居的反对。
使用SQL,我可以通过联接表2次来获得此:
select DISTINCT usr.*
FROM users usr
LEFT JOIN house_user houseDUser ON houseDUser.user_uuid = 'uuid-v4-goes-here'
LEFT JOIN house h on houseDUser.housing_complex_uuid = h.uuid
LEFT JOIN house_user houseUser ON houseUser.housing_complex_uuid = h.uuid
WHERE usr.uuid = houseUser.user_uuid
因此,我可以使用QueryBuilder与邻居取得联系(但我认为不是那么优雅):
$qb = $this->reateQueryBuilder('usr')
->addSelect('users')
->leftJoin(HouseUser::class, 'houses', Join::WITH, 'usr MEMBER OF houses.users')
->leftJoin(User::class, 'users', Join::WITH, 'users MEMBER OF houses.users')
->where('usr = :userUuid')
->setParameter('userUuid', (string)$user->getUuid());
$paginator = new Paginator($qb);
$count = count($paginator);
但是,我每次都得到1分。 有正确的方法来执行这样的查询吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.