Symfony 4 左加入存储库
Posted
技术标签:
【中文标题】Symfony 4 左加入存储库【英文标题】:Symfony 4 left join repository 【发布时间】:2018-10-16 07:16:20 【问题描述】:我是 symfony 社区的新人,我有一个问题要问你!
我有 3 个实体:
Homework
与 id
、title
、description
Student
与 id
、name
Note
与 id
、note
、homework_id
、student_id
在我的树枝视图中,我想显示所有作业(按标题排序),并为每个作业显示学生 X 的注释(X 是控制器参数)。
我尝试在 Note 中填写 leftjoin
以完成所有作业,即使是他没有 bd 条目的作业。
做这样的事情最好的方法是什么?
阿克罗
更多信息
我试试这个,但我需要在树枝视图中 foreach 两次,我的意思是有更好的解决方案
$homeworksRepo = $manager->getRepository(Homework::class); $homeworks= $homeworksRepo ->findByAll();
$notesRepo = $manager->getRepository(Note::class); $notes= $notesRepo->findByStudent($student);
return $this->render('vew.html.twig', [ 'homeworks' => $homeworks, '笔记' => $笔记, ] );
我尝试使用 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] => 空
$qb = $manager->getRepository(Homework::class)->createQueryBuilder('h');
$qb->leftJoin(Note::class,'n','WITH','n.homework = h.id')
->select(['h','n']);
转储($qb->getQuery()->getResult());
我想得到
$res[0] => [Homework object1, Note object 1]
$res[1] => [Homework object2, NULL]
$res[2] => [Homework object3, Note object 2]
【问题讨论】:
注意entity不应该有homework_id
和student_id
作为属性,而是homework
和student
你能edit你的帖子并添加查询生成器吗?
@Cid ,我有作业和学生在实体,我写了数据库字段名称
我尝试使用 queryBuilder 你能显示查询生成器吗?你只显示了结果。
我没有原始的查询构建器...我重写了一个,如果没有注释,现在我在数组中有空元素。在 twig a 中可以遍历数组 2p2 ,但我认为有更好的解决方案?
【参考方案1】:
根据您的数据库结构,如果 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());
然后你可以用 twig 去 foreach(Homeworks as Homework) 和 foreach(Homework->notes as note)
【讨论】:
以上是关于Symfony 4 左加入存储库的主要内容,如果未能解决你的问题,请参考以下文章