2017-08-02 21 views
0

在我的Symfony 2應用程序,我有以下情形,順序如下:主義,如何處理多的flush()

    在我的控制器
  1. 我做一個管理實體(即一些編輯從數據庫retrived或堅持到實體經理)
  2. 如果發生什麼事情,在我的控制器(或在從容器中獲得的外部服務)我在其他實體做一些其他的編輯,或我instanciate一些新的實體。我想要衝洗這些操作 (僅在點2處描述)
  3. 如果發生其他事情,我想編輯一些其他實體,並且要刷新(1)和(3)中所做的更改。否則,我不想沖洗(1)和(3)中所做的更改。有沒有在Doctrine中執行此操作的方法,例如(1)和(3)

同時管理多個工作單位或類似的事情?否則,我正在考慮這個http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#update-queries,即針對點(2)中的每個更新的單個查詢和針對點(2)中的插入的這個http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/query-builder.html#sql-query-builder,但我想知道是否有更好的方法。

+0

「最好」的方法是根本不使用orm。你可能會考慮使用兩個實體管理器。你也可以做$ em-> flush($ entity);但是,再次,任何時候你試圖用orm「開箱即用」,你都會遇到問題。 – Cerad

+0

@Cerad我想我會嘗試使用兩個em。搜索谷歌和查看方法的文檔,'$ em-> flush($ entity);'似乎比專業人士有更多的缺點。 – ste

回答

1

您可以分割你的「系統」實體和「程序」實體,並使用2個連接。看看​​

1

可以detach實體,你不想被刷新,並呼籲$em->flush();

$em->detach($entity); 
+0

如果你想刷新分離的實體後,你可以聲稱他們: doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/working-with-objects.html#merging-entities – Vladislav

+0

@Vladislav this (2)我確切地知道第(1)點發生了什麼,但我不能做這個假設 – ste

+0

你可以準備一個實體數組(使用try-catch塊來查找是否發生了錯誤)需要刷新(在所有步驟都通過後),然後爲數組中的每個實體執行$ em-> clear(),$ em-> persist($ entity),然後執行$ em-> flush()。 –