Symfony 4左联接存储库

时间:2018-10-16 07:16:21

标签: symfony4

我是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] => 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]

1 个答案:

答案 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作为笔记)下方