我是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] =>空$ res [4] =>家庭作业对象3$ res [5] =>注意对象2$ res [6] =>家庭作业对象4$ res [7] => Null
$ 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]
根据您的数据库结构,如果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(以家庭作业->笔记为笔记)