我有一个postLoad事件侦听器,它执行查询来检索某些文件数据,该数据弹出到正在加载的实体的数组中。我这样做是因为我们有许多不同的项目需要添加到实体中,但不是实体必需的。现在它是文件,但我们最终将至少有7个这样的“项目”。我们决定将它们作为Symfony中的服务来实现,而不是将它们提供到infoArray中的“有效载荷”删除。现在,当我们想添加一个新的“项目”时,我们不必编辑数十个业务对象来添加一个新的映射,我们可以将它添加到infoArrray(由服务名称键入),任何需要它的人都可以从它该数组。ResultSetManager在postLoad事件处理程序后发生了破坏
所以我的实体看起来像
/**
* @var integer $id
*
* @ORM\Column(name="ID", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
* @Type("integer")
* @SerGroups({"modulerevision", "module_revision"})
*/
protected $id;
.
.
.
public $servicesArray;
在事件监听器我最终调用下面的方法
public function getFiles(ConsumerInterface $entity, $fullPath = false){
$query = $this->em->createQuery(
'SELECT f
FROM FileManagerBundle:File f
JOIN f.owners o
WHERE o.id = ?1');
$query->setParameter(1, $entity->getOwner());
$files = $query->getResult();
return $files;
}
这个伟大的工程。查询被执行,我得到我的数组文件,并将其推到我的实体中的$ infoArray。
运行负荷后事件代码后,我们把线480
if ($this->_rsm->isMixed) {
跳回教义\ ORM \内部\水化\ ObjectHydrator此时私人varialble _rsm不再设置和房子来轰然倒下以下情况例外
Notice: Trying to get property of non-object in /var/www/symfony/xesapps/vendor/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php line 480
是否有可能在餐后事件被杀害ResultSetManager被用来滋润对象时调用额外查询加载?如果是这样,有没有办法解决这个问题?我需要以不同的方式来解决这个问题吗?
PS - 这个工程在另一个控制器中很好,在这个控制器中,唯一被水化的对象是父对象。它在对象被水合作为对象图的一部分的控制器中失败。
这很有道理。我现在看到我正在访问一个关联,甚至认为它是通过一个接口。它为什么会在一种情况下工作,而不是在另一种情况下工作?就像解析dql的方式以及实体在对象图中的位置? – Quint
其实我并没有深入这个主题的内部,但我想起了一些类似的问题让我疯狂在过去:) – nifr