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。
我绞尽脑汁想弄清楚 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。