2017-08-07 67 views
-1

正如您在下面看到的,我根本不會「堅持」。但我所做的更改正在註冊。我很感謝你的幫助。Symfony2 EntityManager無持續更新

$entityManager = $this->getDoctrine()->getManager(); $entity = $entityManager->getRepository(City::class)->find(1); $entity->setName("debug name"); $entityManager->flush();

+0

我不看到任何問題,因爲你在做什麼是一個更新過程。你不必調用persist來觸發更新因爲你已經調用了flush。 [描述](https://symfony.com/doc/current/doctrine.html#updating-an-object) – BentCoder

+0

$ em-> refresh($ entity)基本上可以撤銷對$ entity進行的所有更改,因爲它是最後一次檢索。 – Cerad

回答

4

你必須初始化一個新的對象時,像new City()調用方法persist()。當您使用find()從數據庫獲取對象時,它已經有一些元數據。 來自原則網站

原則使用身份映射模式來跟蹤對象。無論何時您從數據庫中獲取對象,Doctrine都會在其UnitOfWork內保留對該對象的引用。 包含所有實體 引用的數組是深兩級的,並且具有「根實體名稱」和 「id」的鍵。

下面是從學說例如:

當你打電話的EntityManager#沖洗主義會問身份地圖 爲當前管理的所有對象。這意味着您沒有 可以調用EntityManager#一遍又一遍地將已知的 對象傳遞給EntityManager。這是已知實體的NO-OP,但是 會導致編寫大量代碼,這會讓其他開發人員感到困惑。

下面的代碼將更新到 取得Person對象的更改數據庫,即使你沒有要求的EntityManager#堅持:

<?php 
$user = $entityManager->find("Person", 1); 
$user->setName("Guilherme"); 
$entityManager->flush(); 

更多here