我是symfony社区的新手,我有一个问题要问您!
我有3个实体:
Homework
与id
,title
,description
Student
与id
,name
Note
与id
,note
,homework_id
,student_id
在我的树枝视图中,我想显示所有作业(按标题排序),并为每个作业显示学生X的注释(X是控制参数)。
我尝试在Note中进行leftjoin
,以完成所有作业,即使他没有bd条目也是如此。
做这种事情的最好方法是什么?
akro
更多信息
我尝试了这个,但是我需要在树枝视图中两次,我的意思是有更好的解决方案
$ homeworksRepo = $ manager-> getRepository(Homework :: class);
$ homeworks = $ homeworksRepo-> findByAll();
$ notesRepo = $ manager-> getRepository(Note :: class);
$ notes = $ notesRepo-> findByStudent($ student);
返回$ this-> render('vew.html.twig',[ 'homeworks'=> $ homeworks, 'notes'=> $ notes, ] );
我尝试使用queryBuilder,但结果中只有带注释的作业。
我尝试使用queryBuilder和leftjoin,结果得到这样的结果
$ res [0] =>作业对象1
$ res [1] =>注意对象1
$ res [2] =>作业对象2
$ res [3] => Null
$ res [4] =>作业对象3
$ res [5] =>注意对象2
$ res [6] =>家庭作业对象4
$ res [7] =>空
$ qb = $ manager-> getRepository(Homework :: class)-> createQueryBuilder('h');
$ qb-> leftJoin(注意:: class,'n','WITH','n.homework = h.id')
-> select(['h','n']);
dump($ qb-> getQuery()-> getResult());
我想得到
$res[0] => [Homework object1, Note object 1]
$res[1] => [Homework object2, NULL]
$res[2] => [Homework object3, Note object 2]
答案 0 :(得分:0)
根据数据库结构,如果Home:Notes = 1:n,则输出应为以下内容:
0 => Homework => [
Notes=> [
0 => Note
]
],
1 => Homework => [
Notes=> [
0 => Note
]
],
然后您的queryBuilder应该如下所示:
$qb = $manager->getRepository(Homework::class)
->createQueryBuilder('h') // h is auto selected
->addSelect('n')
->leftJoin(Note::class,'n','WITH','n.homework = h.id');
dump($qb->getQuery()->getResult());
然后使用细枝,您可以转到foreach(以家庭作业为作业)和foreach(以homenote-> notes作为笔记)下方