Symfony 4左连接存储库

问题描述 投票:0回答:1

我是symfony社区的新手,我有一个问题要问您!

我有3个实体:

[Homeworkidtitledescription

[Studentidname

[Noteidnotehomework_idstudent_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]
symfony4
1个回答
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(以家庭作业->笔记为笔记)

© www.soinside.com 2019 - 2024. All rights reserved.