2017-08-07 1 views
-1

Wie Sie unten sehen können, "beharr ich" überhaupt nicht. Aber die Änderungen, die ich mache, registrieren sich. Ich würde Ihre Hilfe schätzen.Symfony2 EntityManager Aktualisierung ohne persistent

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

+0

ich nicht Sehen Sie irgendein Problem dort, als was Sie tun, ist ein UPDATE-Prozess. Sie müssen 'persist' nicht aufrufen, um das Update zu cos- sieren, da Sie bereits' flush' aufrufen. [Hier beschrieben] (https://symfony.com/doc/current/doctrine.html#updating-an-object) – BentCoder

+0

$ em-> refresh ($ entity) macht im Grunde alle Änderungen rückgängig, die an $ entity vorgenommen wurden, seit es zuletzt war abgerufen. – Cerad

Antwort

4

Sie haben Methode persist() rufen, wenn ein neues Objekt zu initialisieren, wie new City(). Wenn Sie ein Objekt aus der Datenbank mit find() abrufen, verfügt es bereits über einige Metadaten. Von Doktrin Website

Doctrine verwendet das Identity Map-Muster, um Objekte zu verfolgen. Immer wenn Sie ein Objekt aus der Datenbank holen, behält Doctrine einen Verweis auf dieses Objekt in seinem UnitOfWork. Das Array mit allen Entitäten Referenzen ist zwei Ebenen tief und hat die Schlüssel "root entity name" und "id".

Hier ist beispielsweise aus der Lehre:

Wenn Sie EntityManager nennen # flush Lehre wird die Identität Karte für alle Objekte stellen, die derzeit verwaltet werden. Dies bedeutet, dass Sie nicht haben, um EntityManager # immer wieder zu aktivieren, um bekannte Objekte an den EntityManager zu übergeben. Dies ist ein NO-OP für bekannte Entitäten, aber führt zu viel Code, der für andere Entwickler verwirrend ist.

Der folgende Code wird Ihre Datenbank mit den zu der Person Objekt vorgenommenen Änderungen aktualisieren, selbst wenn Sie nicht EntityManager # beharren riefen:

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

mehr lesen here

Verwandte Themen