Jira issue originally created by user nicokaiser:
When cascading 'persist' operations, the object which was not persisted implicitly is being written to the DB with wrong parameters, broken SQL:
INSERT INTO email (email, userId) VALUES (?, ?)
See the attached example for details... When I uncomment the "$em->persist($email);" line, everything works as expected (but I'd like this persist to be done automatically...)
Comment created by romanb:
Indeed this looks like a bug, but it is unrelated to cascades.
I will explain on your code sample:
$em = EntityManager::create($connectionOptions, $config);
$user = new \Entity\User;
// This would invoke persist() on the associated email because of the cascade, but there is no email yet!
// After persist() $user is MANAGED
$email = new \Entity\Email;
// On flush the email should be correctly persisted because it is NEW but referenced/reachable from a MANAGED entity ($user)
Just to clarify. So this is a bug in the "persistence by reachability".
"persistence by reachability" means that a NEW entity (like $email) that is associated to a MANAGED entity (like $user) and the association has cascade=persist is automatically persisted on flush().
I still need to write about persistence by reachability in the manual but as you have already found out, it is intuitive since you expect that to happen.
Ok its not completely unrelated to cascades since persistence by reachability still requires cascade=persist ;) but the bug itself has to do with incorrect changeset calculation.
Issue was closed with resolution "Fixed"