Symfony 和 Doctrine 如何获取关联和相关实体

How Symfony and Doctrine fetches associations and related entities

我绞尽脑汁想弄清楚 Symfony 和 Doctrine 是如何获取关联实体的。

想象一下:我有几个关联实体:

当我渲染公司表单时,我创建了表单事件侦听器(在 PRE_SET_DATA 上),它将地区和国家选择框插入到此表单中。 这些字段中的值必须根据关联的区域设置。

我通过以下方式检索当前公司地区:

$company = $event->getData();
$city = $company->getCity()

效果不错

但是当我尝试这个时:

$region = $city->getRegion(); // returns NULL
$country = $region->getCountry(); // returns NULL

这些方法 return 为 NULL。但实际上所有关联都存在,Doctrine 关联映射是正确的。 为什么?

根据 Doctrine 文档:当我为代理对象调用 getter 时(这些对象是代理,对吧?)- Doctrine 应该从数据库中获取不足的数据并更新对象。 事实上 - 方法 return NULLs.

我怎样才能得到任何关联的实体? (来自任何协会深层)

我只需要删除缓存目录...

你应该尝试从你的控制器而不是表单中获取它 Class

  • $em = $this->getDoctrine()->getManager();
  • $em->initializeObject($obj);//这将初始化你需要的对象并从数据库而不是代理中获取真实的对象 class Doctrine returns.

它返回 NULL,因为它有太多的级别 company->(1)city->(2)region 并且代理丢失了学说 class。如果这不起作用,请尝试在拥有城市时进行 DLQ 查询。

如果你想了解代理 class 看起来像 dump($company);你会看到它只显示城市的ID。