[英]Twig and Symfony2 - Entity was not found
我有一個與其他一些實體相關的實體。 最后,我有一個像tat的對象:
paper.submission.authors
對於某些paper.submission,沒有作者,在我的twig模板中,我正在做:
{% for author in paper.submission.authors}
do something
{% endfor %}
對於沒有作者的paper.submission,我得到“未找到實體”異常。
你是否有可能在我的for循環之前測試對象是否存在。
我已經嘗試了定義,它總是如此。 然后,我嘗試過不是null,但這也是生成異常。
非常感謝你提前。
當Doctrine找不到相關實體時,它會拋出此異常。 說這個似乎多余,但實際上這很重要。
這意味着它可以找到與之相關的ID,但請求原則與任何結果都不匹配。
我的猜測是你的數據庫表(實際上是鏈接表) submission.authors
包含0
而不是NULL
ID。
有了這樣,學說認為, 有與ID作者0
,並且為此,找不到它。
submission.authors
始終存在。 它是一個未初始化的 Doctrine代理。
var_dump($submission->getAuthors());
會告訴你什么包含確切的submission.authors
此時,不會進行任何查詢。 它只返回一個帶有標志isInitialized
為false的PersistentCollection
。
當您嘗試從中獲取屬性時會發生異常
foreach ($submission->getAuthors() as $author) {
}
執行此原則時,將檢查是否初始化了getAuthors
。 如果沒有,它將運行以下查詢
SELECT <stuffs> FROM authors WHERE id = 0;
返回不匹配,將拋出EntityNotFound
異常
您必須將您的id行的默認值設置為NULL
並進行查詢以將所有0
更新為NULL
。
有了這個,您可以輕松地測試submission.authors
is not null
如果Doctrine發現NULL
則不會運行任何查詢
如何調試以找到未找到的相關實體?
存儲庫https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/Proxy/ProxyFactory.php#L160中的異常消息已得到改進,但如果使用舊版本,則可以執行以下調試。
如果您使用舊版本
在throw new EntityNotFoundException();
之前,將以下代碼放入ProxyFactory類throw new EntityNotFoundException();
line vendor / doctrine / orm / lib / Doctrine / ORM / Proxy / ProxyFactory.php:177
$entity = $classMetadata->getReflectionClass()->getShortName();
$id = $classMetadata->getIdentifierValues($proxy)['id'];
var_dump("$entity WHERE id = $id NOT FOUND.");exit;
throw new EntityNotFoundException();
在您的實體中,您可以制作以下內容:
public function getSubmission(){
if($this->Submission->getId()==0) return null;
return $this->Submission;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.