簡體   English   中英

Twig和Symfony2 - 未找到實體

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM