Symfony 4 左加入存储库

Posted

技术标签:

【中文标题】Symfony 4 左加入存储库【英文标题】:Symfony 4 left join repository 【发布时间】:2018-10-16 07:16:20 【问题描述】:

我是 symfony 社区的新人,我有一个问题要问你!

我有 3 个实体:

Homeworkidtitledescription

Studentidname

Noteidnotehomework_idstudent_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_idstudent_id作为属性,而是homeworkstudent 你能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 左加入存储库的主要内容,如果未能解决你的问题,请参考以下文章

(Symfony 4)如何手动将供应商类添加到容器中,然后注入存储库/服务类?

从 symfony 4 中彻底删除实体

用于测试的 Symfony 模拟存储库

Symfony - 在服务中注入学说存储库

存储库中的 Symfony DQL 查询

symfony2 实体、存储库、服务混乱