Symfony 条令附条件

Symfony 条令附条件,symfony,doctrine-orm,Symfony,Doctrine Orm,我有三个表:考试表、字段表和数据表 这些关系是: 考试领域众多;现场一点一点的数据;考试一卷多资料 我需要指定字段id和考试id以获取所需的数据 在SQL中,我执行以下操作: SELECT * FROM exam LEFT JOIN field ON exam.id = field.exam_id LEFT JOIN data ON field.id = data.field_id AND (data.exam = exam.id) 行得通 理论上: $this->_em->get

我有三个表:考试表、字段表和数据表

这些关系是:

考试领域众多;现场一点一点的数据;考试一卷多资料

我需要指定字段id和考试id以获取所需的数据 在SQL中,我执行以下操作:

SELECT * FROM exam
LEFT JOIN field ON exam.id = field.exam_id
LEFT JOIN data ON field.id = data.field_id AND (data.exam = exam.id)
行得通

理论上:

$this->_em->getRepository('FwFollowBundle:Exam')
        ->createQueryBuilder('exam')
->leftJoin('exam.field', 'field')
->leftJoin('field.data', 'data', 'WITH', 'data.exam = exam')
->select ('exam', 'field', 'data')
“WITH”条件不会过滤结果

我想返回所有考试及其字段,如果有,还包括数据

我知道为什么。Thx

编辑1: 为了找到问题,我做了一些尝试。 在我的项目中,我在考试和现场之间有一个台阶。 我这样做

$this->_em->getRepository('FwFollowBundle:Exam')
->createQueryBuilder('exam')
->leftJoin('exam.score', 'score')
->leftJoin('score.fields', 'field')
->leftJoin('field.data', 'data', 'WITH', 'data.exam = exam')
->select ('exam', 'score', 'field', 'data')
对于两次考试,我的分数是相同的,所以字段是相同的。我只对数据有分歧。 这是两次考试的同一个字段实体实例。这就是我没有所需数据的原因。

请尝试这样做:

return $this->_em->getRepository('FwFollowBundle:Exam')
    ->createQueryBuilder('exam')
    ->leftJoin('exam.field', 'field')
    ->leftJoin('field.data', 'data')
    ->where('data.exam = :exam')
    ->setParameter('exam', 'exam.id')
    ->getQuery()
    ->getResult()
;

您需要选择要水合的实体,否则当您调用$exam->getField()->getData()原则时,将无条件地延迟加载所有内容

我将重新编写您的查询,类似于:

$exam = $this->_em->createQueryBuilder()
->select('exam', 'field', 'data')
->from('FwFollowBundle:Exam', 'exam')
->leftJoin('exam.field', 'field')
->leftJoin('field.data', 'data', 'WITH', 'data.exam = exam')
->getQuery()
->getResult();

我的查询不完整,我有选择条件来巩固关系。Thx,但是对于你的查询,我没有返回任何内容。我的回答很简短。对不起。对于你的查询,只返回带有数据的考试。我需要返回所有考试及其字段,如果存在,还需要返回数据