Vas*_*802 7 php annotations many-to-many symfony doctrine-orm
我有一个多对多关系,当我加载一个这个关系的实体时,我希望在另一边看到它的属性是相关实体的ArrayCollection.但是,这不会发生 - 加载的ArrayCollection中没有元素,而在数据库中我可以看到相关的条目.可能是什么原因?
这是我的代码:
关系的一面,ConsolidatedReport类:
/**
* @var ArrayCollection
*
* @ORM\ManyToMany(targetEntity="P24\Response", inversedBy="consolidatedReports")
* @ORM\JoinTable(name="con_rprt_responses")
*/
private $responses;
Run Code Online (Sandbox Code Playgroud)
关系的另一面,Response类:
/**
* @var ArrayCollection
*
* @ORM\ManyToMany(targetEntity="P24\ConsolidatedReport\ConsolidatedReport", mappedBy="responses")
*/
private $consolidatedReports;
Run Code Online (Sandbox Code Playgroud)
这是我运行以获取ConsolidatedReport实例的函数.此函数位于从容器调用的服务中:
/**
* Picks the consolidated report with given id.
*
* @param string $id
*
* @return ConsolidatedReport
*
* @throws NonExistentConsolidatedReportException if the survey doesn't exist
*/
public function pick($id)
{
$report = $this->repository->findOneBy(array('id' => $id));
if (!$report) {
throw new NonExistentConsolidatedReportException($id);
}
return $report;
}'
Run Code Online (Sandbox Code Playgroud)
在数据库中,存在"con_rprt_responses"表,其中包含两列"consolidated_reports_id"和"response_id".但是,在分析器中,我没有看到对该表的任何查询.
这可能会出错?
更新:请看下面我对这个问题的回答,这对我有用.
我添加fetch="EAGER"
到ConsolidatedReport类的$ responses属性,它工作.
代码现在看起来像这样:
/**
* @var ArrayCollection
*
* @ORM\ManyToMany(targetEntity="P24\Response", inversedBy="consolidatedReports", fetch="EAGER")
* @ORM\JoinTable(name="con_rprt_responses")
*/
private $responses;
Run Code Online (Sandbox Code Playgroud)
更多信息:http: //doctrine-orm.readthedocs.org/en/latest/reference/working-with-objects.html#by-eager-loading
如果有人知道为什么相关实体的集合无法在没有明确指定EAGER获取的情况下加载 - 请分享您的知识,我们非常感谢!