Doctrine addSelect()原则存储库存在问题。多对多关系
我有symfony 5、doctrine 2和PHP7.3 四个实体:Doctrine addSelect()原则存储库存在问题。多对多关系,doctrine,repository,many-to-many,symfony5,Doctrine,Repository,Many To Many,Symfony5,我有symfony 5、doctrine 2和PHP7.3 四个实体: OrderworkMeeting谁包含一个会议 包含多个MeetingUsers的会议 包含一个用户和一个会议的会议用户(用于会议和用户之间的多对多关系) 使用者 当我在OrderworkMeeting存储库中请求获取一个特定用户的所有OrderworkMeeting时,我只返回一个用户,无法查看同一会议中的其他用户 我认为这是错误,因为如果我在此之前复制了请求,但没有特定的用户,这就是工作 代码如下: $list
$list = $repo_om->getByUser([15]);
foreach ($list as $oo) {
var_dump(count($oo->getMeeting()->getUsers()));
}
返回1
$listForNothing = $repo_om->getByUser();
$list = $repo_om->getByUser([15]);
foreach ($list as $oo) {
var_dump(count($oo->getMeeting()->getUsers()));
}
返回2
在我的OrderworkMeetingrepository中:
public function getByUser($userId=0){
$qb = $this->createQueryBuilder('om');
$qb ->leftJoin('om.meeting', 'm')
->addSelect('m')
->leftJoin('m.users', 'mu')
->addSelect('mu')
->leftJoin('mu.user', 'u')
->addSelect('u');
$this->setQbListLink($qb);
$this->addQbOtherListLink($qb);
if($userId){
$or = $qb->expr()->orX();
$or->add('u.id IN (:id)');
$qb->setParameter('id', $userId);
$qb->andWhere($or);
}
->orderBy('m.date', 'DESC');
return $qb->getQuery()->getResult();
}
我不明白的是什么?
欢迎你的帮助,我想我是傻瓜:)
提前谢谢
编辑:
在我的项目中进行了其他测试之后,我发现我的条令问题爆发了:
使用addSelect():16个查询,
无:84个查询
所以我真的需要addSelect来减少查询
我不明白为什么在我删除addSelect时这可以解决我的问题?我读到addSelect“merge”查询字段,但这如何以及为什么会改变我的结果?
那是从fields的名字来的吗
非常感谢您的帮助添加
addSelect
语句有什么特殊原因吗?只需进行连接,直到您能够查询用户(例如,在您的MtM连接实体中)就足够了。所以:->createQueryBuilder('om')->join('om.meeting','m')->addCriteria((新标准)->expr()->contains('mu.users',$users))->getQuery()->getResult()
(我想应该是用玻璃杯(或3)盲目地键入它)另外,从外观上看,它涉及到一个存储库函数,使该函数需要一个用户数组:/**@var User[]$users*/public function getByUsers(array$users):array{…}
(或单数:public function getByUser(User$User):array{…}
-但不是通过idint
-太混乱(意见)感谢rkeet的回复,我删除了addSelect并完成了它的工作。这是一个非常大的项目,我在任何地方使用这个addSelect都没有任何问题…我不知道为什么。对于array/int,这是一个错误的例子。非常感谢!