Symfony 条令附条件
我有三个表:考试表、字段表和数据表 这些关系是: 考试领域众多;现场一点一点的数据;考试一卷多资料 我需要指定字段id和考试id以获取所需的数据 在SQL中,我执行以下操作: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
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,但是对于你的查询,我没有返回任何内容。我的回答很简短。对不起。对于你的查询,只返回带有数据的考试。我需要返回所有考试及其字段,如果存在,还需要返回数据