Skip to content

Loading…

DDC-108: Transitive persistence broken #1674

Closed
doctrinebot opened this Issue · 3 comments

1 participant

@doctrinebot

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 (?, ?)
array(3) {
[1]=>
NULL
[2]=>
string(16) "user@example.com"
[3]=>
int(1)
}

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...)

@doctrinebot

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;
$user->setName('Bob');

// This would invoke persist() on the associated email because of the cascade, but there is no email yet!
// After persist() $user is MANAGED
$em->persist($user);

$email = new \Entity\Email;
$email->setEmail('user@example.com');
$user->addEmails($email);

// On flush the email should be correctly persisted because it is NEW but referenced/reachable from a MANAGED entity ($user)
$em->flush();

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.

@doctrinebot

Comment created by romanb:

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.

@doctrinebot

Issue was closed with resolution "Fixed"

@doctrinebot doctrinebot added this to the 2.0-ALPHA3 milestone
@doctrinebot doctrinebot closed this
@doctrinebot doctrinebot added the Bug label
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.