Symfony2:Doctrine不会以多对多关系加载相关实体

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".但是,在分析器中,我没有看到对该表的任何查询.

这可能会出错?

更新:请看下面我对这个问题的回答,这对我有用.

Vas*_*802 9

我添加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获取的情况下加载 - 请分享您的知识,我们非常感谢!

  • 我遇到了与一对多关系相同的问题,`fetch ="EAGER"`也解决了它.这很奇怪.你有没有弄清楚为什么需要急切的提取? (2认同)