簡體   English   中英

如何阻止Doctrine 2在Symfony 2中緩存結果?

[英]How to stop Doctrine 2 from caching a result in Symfony 2?

我希望能夠檢索實體的現有版本,以便將其與最新版本進行比較。 例如,編輯文件,我想知道自從進入DB以來該值是否已更改。

    $entityManager = $this->get('doctrine')->getEntityManager();
    $postManager = $this->get('synth_knowledge_share.manager');

    $repository = $entityManager->getRepository('KnowledgeShareBundle:Post');
    $post = $repository->findOneById(1); 

    var_dump($post->getTitle()); // This would output "My Title"
    $post->setTitle("Unpersisted new title");

    $existingPost = $repository->findOneById(1); // Retrieve the old entity

    var_dump($existingPost->getTitle()); // This would output "Unpersisted new title" instead of the expected "My Title"

有誰知道如何繞過這個緩存?

這是正常的行為。

Doctrine在EntityManager中存儲檢索到的實體的引用,因此它可以通過它的id返回實體而不執行另一個查詢。

你可以這樣做:

$entityManager = $this->get('doctrine')->getEntityManager();
$repository = $entityManager->getRepository('KnowledgeShareBundle:Post');
$post = $repository->find(1);

$entityManager->detach($post);

// as the previously loaded post was detached, it loads a new one
$existingPost = $repository->find(1);

但請注意,由於$ post實體已分離,因此如果要再次保留它,則必須使用 - > merge()方法。

您還可以使用refresh方法,該方法從數據庫刷新實體的持久狀態,覆蓋尚未保留的任何本地更改。 就像是:

$entityManager = $this->get('doctrine')->getEntityManager();
$repository = $entityManager->getRepository('KnowledgeShareBundle:Post');
$post = $repository->find(1);

$entityManager->refresh($post);

現在$ post包含數據庫的最新版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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