我有一個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