Creo una nuova entità con uno esistente Id
e desidero aggiornare il record del database correlato.Unisci doctrine: campo DateTime sempre aggiornato
Doctrine merge è stato il mio migliore amico: riconosce se ci sono cambiamenti e genera la query di aggiornamento corretta.
$entity = new Entity();
$entity->setId(1);
$entity->setName('test');
$EntityManager->merge($entity);
$EntityManager->flush();
Supponiamo che l'elemento con l'id = 1 già esiste nella db: se il nome è diverso da 'prova', Doctrine genera questa ricerca:
UPDATE table SET name = ? WHERE id = ? ["test","1"]
Se eseguire nuovamente il codice sopra, Doctrine riconosce che nulla è cambiato e nessuna query è stata commessa.
Ma ... quando ho impostato un campo datetime, Dottrina considerano come modificato e corre sempre la query di aggiornamento:
$entity = new Entity();
$entity->setId(1);
$entity->setDate(new \DateTime(2000-01-01));
$EntityManager->merge($entity);
$EntityManager->flush();
//* ALWAYS commits this query:
>> UPDATE table SET date = ? WHERE id = ? ["2000-01-01 00:00:00","1"]
Sai un modo per evitare questo aggiornamento inutile? Grazie!
Tipico approccio del programmatore: _Se non riesci a risolvere il bug, contrassegnalo come una caratteristica! _;) – T30
Ti ho quasi svalutato perché non ero d'accordo con il motivo XD – andho
I metodi di equità e hash di Java sono davvero appropriati qui . – andho