Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

DataObjectManager Module

Discuss the DataObjectManager module, and the related ImageGallery module.

Moderators: martimiz, UncleCheese, Sean, biapar, Willr, Ingo, swaiba, simon_w

Using ManyManyDataObjectManager on the belongs_many_many side

Go to End

25 Posts   5445 Views


9 July 2009 at 7:44pm Community Member, 288 Posts


I have been trying to use the ManyManyDataObjectManager on both sides of the many-many relationship but when I try to load a page that has the belongs_many_many-relationship I get an empty javascript alert and then it says "Error loading the page". The ManyManyComplexTableField has the same behaviour so this is probably inherited from there.

Isn't it supposed to work on both sides?
I am trying for a setup where products and accessories are related to eachother. They are both pages so I want the user to be able to specify the relationship if they're creating a product or an accessory. Right now the only possible way to manage the relationship is through the product page which gets a bit clumsy.

I will also be adding a third page to the mix later and then it will be even more important to be able to set the relationship from both sides.

Kindly, Marcus


10 July 2009 at 1:34am 4085 Posts

The belongs_many_many part of the relationship should be a descendant of DataObject, not SiteTree. So I'm not sure what you mean when you say you're looking at it from the other side, unless you're in ModelAdmin, maybe?


10 July 2009 at 1:51am Community Member, 288 Posts

Does it really matter if it's a descendant of DataObject or not?
Well of course it matters in some way since it doesn't work, but the other DataObjectManagers work on Sitetree and Sitetree inherits DataObject so Sitetree is a DataObject too.

I have the relationships working now by using checkBoxSetField on the belongs_many_many-side. This solution was bugging before and that's why I tried using the ManyManyDataObjectManager on the belongs_many_many pages.

To explain what I'm trying to do, I have two page types that are related to eachother, Products and Accessories. Products have the relationship $many_many and Accessories has the $belongs_many_many. The reason I tried this is because I want to be able to define the relationships when I make the Accessory, not just on the product side.

Anyways, it's only the ManyManyDataObjectManager and it's ComplexField equivalent that throw the error, it actually kind of works if you use the hasManyDataObjectManager on the belongs_many_many-side. You can't actually manage the relationship but the DataObjectManager shows up and doesn't give an error.

What I am thinking is that this is some kind of bug since you get an empty javascript dialog. Could you point me to the code that figures out what it's supposed to be fetching or is there some other way I can see what is happening and causing the error?

I really think that the manymany-managers (yours and the original) should work if you're using it on the page that has $many_many or on the page that has the $belongs_many_many. After all, it should be pretty much the same functionality, the connection table is there after all and all that should have to be done is reverse it.

The scenario I am working from here is that even though one is $many_many and the other one is $belongs_many_many the system needs to treat them more equal than in a has_one -> has_many. I pretty much have it working now with the checkBoxSetField but your DataObjectManager looks alot cooler ;)


10 July 2009 at 2:04am 4085 Posts

I would start by just finding out what the error is. Turn on error reporting via email, look at the result of the AJAX request in Firebug. There are a number of things you can do to figure out what the error is. An empty alert box isn't much to go on.


10 July 2009 at 2:06am Community Member, 288 Posts

Yes I will go digging and report back what I find!

Chris Dangerfield

4 September 2009 at 2:13pm Community Member, 8 Posts

Just wanting to know if you solved this one. I am having exactly the same difficulty.


4 September 2009 at 7:23pm Community Member, 288 Posts

No, I went for the checkBoxSetField solution since I was short on time and didn't have the time to troubleshoot it. Thanks for reminding me though, I actually have some spare time nowadays so I'll have a look at this and see if I can figure it out.

I'll try to report back today with my findings.


5 September 2009 at 2:11am Community Member, 288 Posts

Ok I have started tracing this.

Fixing ManyManyComplexTableField is pretty simple. For some reason the code for figuring out which table to hit when it's a belongs_many_many is wrong. Simply replace the if statement that begins on line 28 or thereabouts with this:

if( isset( $belongsManyManyRelations ) && array_key_exists( $this->name, $belongsManyManyRelations ) ) {
   $newSingleton = singleton($belongsManyManyRelations[$this->name]);
   $relationships = $newSingleton->uninherited('many_many', true);
   $tie = array_search($controller->ClassName, $relationships);
   $this->manyManyParentClass = $class;
   $manyManyTable = $belongsManyManyRelations[$this->name] . '_' . $tie;

This code will find the correct table to link up to. However ManyManyDataObjectManager seems to choke on some other error as well that occurs somewhere in the DataObjectManager base class. I am still tracking this error but the above code should tide you over with the ManyManyComplexTableField until I find and fix this.

Go to Top