对于我的生活,我无法让它发挥作用。我在回合和计划实体之间存在多对一关系。 计划与One-To-Many的 ProgramDetail 相关。
基本上回合<多对一> 计划<一对多>的 ProgramDetail
回合实体
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Program", inversedBy="rounds")
* @ORM\JoinColumn(nullable=false)
*/
private $programs;
计划实体
/**
* @ORM\OneToMany(targetEntity="App\Entity\Round", mappedBy="programs")
*/
private $rounds;
/**
* @ORM\OneToMany(targetEntity="App\Entity\ProgramDetail", mappedBy="program")
*/
private $details;
ProgramDetail 实体
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Program", inversedBy="details")
* @ORM\JoinColumn(nullable=false)
*/
private $program;
以下是我根据 ProgramDetail 查询所有现有轮次的方法。
// RoundRepository.php
public function getRoundsWithProgramDetails()
{
return $this->createQueryBuilder('round')
->leftJoin('round.programs', 'rp')
->leftJoin('rp.details', 'pd')
->getQuery()->execute();
}
以下是我尝试输出的方法
{% for round in rounds %}
<tr>
<td>{{ round.year }}</td>
<td>{{ round.programs.details.id }}</td>
<td>{{ round.scoreSendDate|date('m-d-Y') }}</td>
<td>{{ round.sampleSendDate|date('m-d-Y') }}</td>
<td>{{ round.resultSendDate|date('m-d-Y') }}</td>
<td>{{ round.status }}</td>
</tr>
{% endfor %}
如果我完成这项任务,我会立即在项目上取得40%的进展,因为我主要遇到这样的问题。任何帮助表示赞赏
答案 0 :(得分:2)
我认为错误是由此行{{ round.programs.details.id }}
触发的?
现在round.programs.details
是ProgramDetail实体的集合,因为它是OneToMany关系。这就是提到错误消息Doctrine\ORM\PersistentCollection
的原因。您基本上尝试访问ProgramDetail实体集合的id
属性,这显然不存在。
我认为关系应该是OneToOne而不是ManyToOne / OneToMany,因为在当前形式中,每个程序都可以分配多个 ProgramDetails,因此它们表示为实体的列表/集合而不是作为一个单一的实体。
如果没有,您需要在该列表中指定索引以获取ID:{{ round.programs.details.first.id }}
或者通常找到另一种使用 ProgramDetail实体列表的方式那里。