[MODM-140] Issue with nested embdedded documents after adding an EmbeddedDocument to Document Created: 14/Apr/11  Updated: 19/Dec/11

Status: Open
Project: Doctrine MongoDB ODM
Component/s: UnitOfWork
Affects Version/s: 1.0.0BETA3
Fix Version/s: None

Type: Bug Priority: Major
Reporter: Andrew Cobby Assignee: Jonathan H. Wage
Resolution: Unresolved Votes: 5
Labels: None

PHP 5.3.3, Mac OS X 10.6.6, MongoDB 1.8.0

Attachments: File doctrine-odm-patch-1.0.0beta3.diff     File MODM140Test.php    


I'm using the latest version of Doctrine ODM (fresh from Git).

I have three levels of Documents (Two embedded); Category -> EmbedsMany: Post -> EmbedsMany PostVersion.


1. Make a new Post (Post1), 2 PostVersions (PostVersion1 and 2) and a Category
2. Add Post1 to Category
3. Persist Category, Flush, Clear
4. Retrieve Category
5. Make a new Post (Post2) and 2 PostVersions(PostVersion3 and 4)
6. Add Post2 to Category
7. Flush

If you're following properly, at this stage in the database there should be:
1 Category,
2 Posts
4 PostVersions ... 2 PostVersions in each Post

However, what actually happens is:
1 Category,
2 Posts
4 PostVersions ... 4 PostVersions in Post1, 0 PostVersions in Post2

On StackOverflow: http://bit.ly/ekFbe2
Testcase Gist: https://gist.github.com/920914

A work around is to make Post2 and add it to Category, flush, then make new PostVersions and flush again.

I did some debugging but I don't know enough about the internals to fix the issue.

Comment by Andrew Cobby [ 14/Apr/11 ]

Failing test

Comment by Andrew Cobby [ 14/Apr/11 ]

Added a test using the EmbdeddedTestLevelX Documents, please refer to Gist: https://gist.github.com/920914

For some reason, they work? I'm thinking maybe this isn't a bug... very confused at the moment.

Comment by Andras Revai [ 18/Jun/11 ]

I've got the same problem.

Comment by Kelvin Wood [ 09/Aug/11 ]

I had a similar problem, and resolved it with the attached patch (based on the 1.0.0beta3 release).

This patch causes the ODM to stop scanning for changes further down the heirachy once it finds a new object, and then ensures that the Persistence Builder will include all contents of the new item.

Comment by Richard Shank [ 19/Dec/11 ]

Kevin, do you want to put a PR in on github for this?

Generated at Thu Oct 08 12:26:17 EDT 2015 using JIRA 6.4.10#64025-sha1:5b8b74079161cd76a20ab66dda52747ee6701bd6.