php - update - symfony order by




Doctrine 2 mise à jour de l'entité (3)

Est-il possible de mettre à jour une entité de la même manière que ci-dessous:

$data       = new ATest();  // my entity
$data->id   = 1;            // id 1 already exists, I just want to update this row
$data->name = "ORM Tested"; // changed the name

$entityManager->persist($data);
$entityManager->flush();

Cela insérera et modifiera l'id de l'objet au lieu de mettre à jour la ligne existante dans la base de données.


Je devais utiliser

$entityManager->merge($data)

Ou obtenez simplement l'entité gérée plutôt qu'une entité vide.

$data = $entityManager->getRepository('ATest')->findOne(1); // ATest is my entitity class
$data->name = "ORM Tested"; // just change the name

$entityManager->persist($data);
$entityManager->flush();

Si l'entité est déjà gérée, persist () la mettra à jour plutôt que d'insérer une nouvelle.


Vous pouvez également utiliser getReference pour mettre à jour une propriété d'entité par identificateur sans récupérer l'état de la base de données.

https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/advanced-configuration.html#reference-proxies

Cela établira un proxy simple pour travailler entité par ID au lieu d'instancier une new Entity ou d'obtenir explicitement l'entité de la base de données à l'aide de find() , qui peut ensuite être mise à jour par flush.

$data = $entityManager->getReference('ATest', $id);
$data->setName('ORM Tested');
$entityManager->flush();

Ceci est particulièrement utile pour mettre à jour les associations OneToMany ou ManyToMany d'une entité. EG: $case->addTest($data);

Il est généralement déconseillé de définir manuellement l'identificateur d'une nouvelle entité, même si l'intention est de mettre à jour l'entité. Au lieu de cela, il est généralement préférable de laisser EntityManager ou le constructeur Entity établir les identifiants appropriés, tels qu'un UUID . Pour cette raison, Doctrine générera des entités par défaut avec l'identifiant en tant que propriété privée sans méthode de définition.







doctrine-orm