【问题标题】:Symfony 4 left join repositorySymfony 4 左加入存储库
【发布时间】: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 ,但我认为有更好的解决方案?

标签: symfony4


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 2016-10-08
    • 2020-06-17
    • 2018-08-15
    • 2019-02-21
    • 1970-01-01
    • 2012-08-26
    相关资源
    最近更新 更多