Hi Marco, thanks for your response, will try to find/make some time for a testcase.
I looked at the 'owning side' part, but B is per definition the owning side of the (unidirectional) B => many-to-one => C association. Nothing else changes / needs updating I think. But, will be back with a test case soon (I hope ;)) Cheers On 16 October 2014 18:39, Marco Pivetta <[email protected]> wrote: > Hi Menno, > > On 16 October 2014 15:23, Holtkamp <[email protected]> wrote: > >> Suppose I got the following Entities >> >> A => one-to-many => B >> B => many-to-one => C >> >> Then let's >> >> 1. load an instance of A: $a >> 2. given $a, iterate over the collection of B's: >> 3. pick a specific B: $b. For that specific B: >> 4. given $b, change the instance of C ($c1), with another, already >> existing / managed instance of C ($c2) >> >> >> After flushing, I would expect that the join- column of the table for >> Entity B referring to Entity C would be updated from $c1.id to $c2.id >> >> But instead: >> >> - when invoking $entityManager->flush(); the value of the column >> in'b.c_id' does not change (seems the change is not detected) >> - when invoking $entityManager->flush($b); the value of the column >> in'b.c_id' does change (the change is detected) >> >> And as experiment: >> >> - when invoking $entityManager->flush($a); the value of the column >> in'b.c_id' does not change (the change is not detected) >> >> I thought that $entityManager->flush() would check its internal Identity >> Map for all 'dirty' / changes objects and flush them. But it appears the >> change to Entity B as part of the collection in Entity A is not detected. >> >> Has that behavior changed recently, or is my assumption incorrect, can't >> remember I ever needed to explicitly invoke flush on a specific kind of >> Entity... >> >> Cheers, >> >> Menno >> >> PS, the reason I am asking is because we are using DCI >> <http://en.wikipedia.org/wiki/Data,_context_and_interaction> inspired >> UseCases that should only return a boolean. After a successfull execution >> of a UseCase the controller invokes $entityManager->flush(). Now I have to >> do $entityManager->flush($b); inside the UseCase (we should not return the >> $b to the controller), while the UseCase is purely functional and should >> not care about such details. >> >> From what I read here, you simply didn't update the owning side of the > association. > > You should really abstract this example you just described in words into a > small integration test like the ones that can be found at > https://github.com/doctrine/doctrine2/tree/35d44057275f010e1a7d5fd400c4dfdd446eb9ab/tests/Doctrine/Tests/ORM/Functional/Ticket, > as a test case speaks for more than a thousand words in this case. > > Marco Pivetta > > http://twitter.com/Ocramius > > http://ocramius.github.com/ > > -- > You received this message because you are subscribed to the Google Groups > "doctrine-user" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/doctrine-user. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "doctrine-user" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/doctrine-user. For more options, visit https://groups.google.com/d/optout.
