正如您在下面看到的,我根本不會「堅持」。但我所做的更改正在註冊。我很感謝你的幫助。Symfony2 EntityManager無持續更新
$entityManager = $this->getDoctrine()->getManager(); $entity = $entityManager->getRepository(City::class)->find(1); $entity->setName("debug name"); $entityManager->flush();
正如您在下面看到的,我根本不會「堅持」。但我所做的更改正在註冊。我很感謝你的幫助。Symfony2 EntityManager無持續更新
$entityManager = $this->getDoctrine()->getManager(); $entity = $entityManager->getRepository(City::class)->find(1); $entity->setName("debug name"); $entityManager->flush();
你必須初始化一個新的對象時,像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
我不看到任何問題,因爲你在做什麼是一個更新過程。你不必調用persist來觸發更新因爲你已經調用了flush。 [描述](https://symfony.com/doc/current/doctrine.html#updating-an-object) – BentCoder
$ em-> refresh($ entity)基本上可以撤銷對$ entity進行的所有更改,因爲它是最後一次檢索。 – Cerad