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

时间:2015-09-25 09:35:32

标签: symfony doctrine associations

我试图了解Symfony和Doctrine如何获取相关实体。

让我们想象一下:我有几个相关的实体:

  • 公司(ManyToOne to City)
  • 城市(ManyToOne to Region,OneToMany to Company)
  • 地区(ManyToOne到国家,OneToMany到城市)
  • 国家/地区(OneToMany to Region)

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

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

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

这很好用

但是当我尝试这个时:

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

这些方法返回NULL。但实际上所有关联都存在且Doctrine关联映射是正确的。的为什么吗

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

我如何获得任何关联实体? (来自深层次的任何协会)

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

你应该尝试从你的控制器而不是Form Class

获取它
  • $ em = $ this-> getDoctrine() - > getManager();
  • $ em-> initializeObject($ obj); //这将初始化您需要的对象并从数据库中获取真实对象,而不是Doctrine返回的代理类。

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

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