You can still access the associated properties author and comments and the associated objects they contain. Instead of passing you back a real Author instance and a collection of comments Doctrine will create proxy instances for you.Only if you access these proxies for the first time they will go through the Entity Manager and load their state from the database.When it comes time to synchronize the entity with the database, calling the flush() method will do the trick within the scope of any transaction.So what's an example of actually using the merge() method for a detached entity?Deleting an object with all its associated objects can be achieved in multiple ways with very different performance impacts. Changes made to the detached entities, if any (including their removal), will not be synchronized to the database after they have been detached.Doctrine will not hold on to any references to detached entities. The synchronization involves writing any updates to persistent entities and their relationships to the database.
The action taken depends on the value of the statement for records of each join table or it depends on the foreign key semantics of on Delete=”CASCADE”.Then, the property values from the detached instance are copied onto the properties of the managed instance.The main problem with this operation is that merging clobbers any changes that may have been made to the database record since the detached instance was retrieved (unless object versioning is used). If an entity instance with the same identifier as the detached instance has already been loaded into the current persistence context, a non-unique object exception is thrown because the uniqueness contract of entities in a persistence context is violated.A real proxy class override all non-identity non-transient object state at instantiation time in order to enable lazy-loading mechanisms: Warning Traversing the object graph for parts that are lazy-loaded will easily trigger lots of SQL queries and will perform badly if used to heavily.Make sure to use DQL to fetch-join all the parts of the object-graph that you need as efficiently as possible. By applying the persist operation on some entity, that entity becomes MANAGED, which means that its persistence is from now on managed by an Entity Manager.