Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony-与ORM一起使用外部联接_Php_Orm_Symfony_Doctrine Orm - Fatal编程技术网

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;
    }
}

只需传入
用户
实体的一个实例,瞧

将您的解决方案移动到新答案,然后“接受”它(绿色勾选)!:)