Php Symfony-与ORM一起使用外部联接
我有三个实体:Php Symfony-与ORM一起使用外部联接,php,orm,symfony,doctrine-orm,Php,Orm,Symfony,Doctrine Orm,我有三个实体:用户,答案,和问题 用户和答案之间存在一种单一关系,答案和问题之间存在多种单一关系。基本上,特定用户可以选择回答一系列问题 我试图在ORM世界中完成的是检索特定用户的所有问题及其相关答案。关键部分是,用户可能没有回答某个特定的问题,但我仍然希望得到该问题(答案为空) 我的Answer实体有一个“user”字段,该字段映射到user实体,该实体由user实体内的“answers”字段反转。如果我在用户实体中使用这个“答案”字段,我只会得到用户实际回答的问题/答案对。我没有收到用户没有
用户
,答案
,和问题
用户
和答案
之间存在一种单一关系,答案
和问题
之间存在多种单一关系。基本上,特定用户可以选择回答一系列问题
我试图在ORM世界中完成的是检索特定用户的所有问题及其相关答案。关键部分是,用户可能没有回答某个特定的问题,但我仍然希望得到该问题(答案为空)
我的Answer
实体有一个“user”字段,该字段映射到user
实体,该实体由user
实体内的“answers”字段反转。如果我在用户
实体中使用这个“答案”字段,我只会得到用户实际回答的问题/答案对。我没有收到用户没有回答的问题
通常,使用原始SQL,这将在我的问答表之间涉及一个简单的“左外部联接”,但我希望这可以使用Doctrine的ORM来完成。有什么建议吗?我对ORM的世界还很陌生。我做到了!以下是方法:
我在我的问题
实体中创建了一个字段,其中包含所有用户针对该特定问题的所有答案;它与应答
实体的一对一关系映射。然后,为了确保我们将该列表限制为特定用户的答案,我为我的问题实体创建了一个自定义存储库,并创建了以下函数:
public function findAllJoinedToAnswer($user)
{
$query = $this->getEntityManager()
->createQuery('
SELECT q, a
FROM Bundle:Question q
LEFT JOIN q.answers a
WITH a.user = :user'
)->setParameter('user', $user);
try{
return $query->getResult();
}catch (\Doctrine\ORM\NoResultException $e) {
return null;
}
}
只需传入用户
实体的一个实例,瞧 将您的解决方案移动到新答案,然后“接受”它(绿色勾选)!:)