我正在使用Symfony 2中的Doctrine 2的項目,我使用MEMCACHE來存儲原則的結果。 我從MEMCACHE中檢索到的對象有問題。學說2 - 如何在關係中使用從緩存中檢索的對象
我發現這個職位相似,但這種方法不解決我的問題:Doctrine detaching, caching, and merging
這是該方案
/**
* This is in entity ContestRegistry
* @var contest
*
* @ORM\ManyToOne(targetEntity="Contest", inversedBy="usersRegistered")
* @ORM\JoinColumn(name="contest_id", referencedColumnName="id", onDelete="CASCADE"))
*
*/
protected $contest;
和其他實體
/**
* @var usersRegistered
*
* @ORM\OneToMany(targetEntity="ContestRegistry", mappedBy="contest")
*
*/
protected $usersRegistered;
現在想象大賽是在緩存中,我想保存一個ContestRegistry條目。 所以我檢索對象的較量中緩存如下:
$contest = $cacheDriver->fetch($key);
$contest = $this->getEntityManager()->merge($contest);
return $contest;
而作爲最後的操作我做的:
$contestRegistry = new ContestRegistry();
$contestRegistry->setContest($contest);
$this->entityManager->persist($contestRegistry);
$this->entityManager->flush();
我的問題是,這種理論正確保存新的實體,而且它使一個更新在實體大賽上,它會更新已更新的專欄。真正的問題是,它會爲每個條目進行更新查詢,我只是想添加對實體的引用。 我如何才能做到這一點? 任何幫助,將不勝感激。
嗨,我試了兩種解決方案,第一個不起作用。我不知道爲什麼。參考它的作品。也許當我更改跟蹤策略時,我應該修改關係中涉及的所有實體? – stuzzo
我已經研究過這個問題,而且看起來實體被標記爲髒,不管更改跟蹤策略如何。所以這不是一個選項。我已經更新了我的答案。 –
順便說一句:我建議使用_Deferred Explicit_作爲_all_你的實體,因爲刷新變得便宜很多。想象一下,你裝載了5000個實體並改變了1,_Deferred Implicit_將檢查全部5000個,_Deferred Explicit_將只檢查1你調用的'$ em-> persist()'。 –