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.

Customising the CMS

Members, DataObjectDecorate and ManyManyComplexTableField question


4 Posts   1806 Views


8 August 2009 at 3:10am (Last edited: 8 August 2009 3:11am), Community Member, 18 Posts

My that was a mouthful of a title :)

I'm building a website for a company and the user who log in are Reps. Not seeing the need to reinvent the window I'm extending the Member object using the code below.

Reps have a many-to-many relationship with branches. The relationship works, and if I edit a branch I can select as many reps as I need. But... I cannot get a 'Branches' tab to show up when editing a Rep (by going to 'Security' then choosing the 'Reps' group, then editing a user account)!

I'm certain this is possible and I must be doing something wrong. The error is:

ERROR [Warning]: Can't figure out the data class of Member
IN GET /admin/security/EditForm/field/Members/item/2/edit?ajax=1
Line 32 in /var/www/navs/htdocs/sapphire/forms/HasManyComplexTableField.php

and I'm not sure what a data class is - a page? A controller?

// Based off the forum module & wiki documentation
class RepsRole extends DataObjectDecorator {

function extraStatics() {
return $fields;

function updateCMSFields(FieldSet &$fields) {
$fields->addFieldToTab('Root.Main',new TextField("BeneficiaryNumber", "Beneficiary Number"), "Email");
$fields->addFieldToTab('Root.Main',new TextField("Website", "Website URL"), "Email");

$modulesTablefield = new ManyManyComplexTableField(
'FirstName' => 'FirstName'
$modulesTablefield->setAddTitle( 'A Rep' );

$fields->addFieldToTab( 'Root.Branches', $modulesTablefield );

Any help would be much appreciated.


8 August 2009 at 3:22am Community Member, 18 Posts

I got a bit further:

If I changed 'Member' for $this->owner in the new ManyManyComplexTableField( definition, the error becomes:

ERROR [User Error]: Couldn't run query:
SELECT `SiteTree`.*, `SiteTree`.ID, if(`SiteTree`.ClassName,`SiteTree`.ClassName,'SiteTree') AS RecordClassName, `FirstName`, IF(`MemberID` IS NULL, '0', '1') AS Checked
FROM `SiteTree`
LEFT JOIN `BranchPage_RepsBranches` ON (`SiteTree`.`ID` = `BranchPageID` AND `MemberID` = '2')
WHERE (`SiteTree`.ClassName IN ('BranchPage'))
GROUP BY `SiteTree`.ID
LIMIT 0,10

Table 'navs.BranchPage_RepsBranches' doesn't exist
IN GET /admin/security/EditForm/field/Members/item/2/edit?ajax=1
Line 401 in /var/www/navs/htdocs/sapphire/core/model/MySQLDatabase.php

Which is not surprising as the table is named BranchPage_Reps.

Changing my definition to:

$modulesTablefield = new ManyManyComplexTableField(
'FirstName' => 'FirstName'

Results in the error becoming

Fatal error: Cannot instantiate abstract class Object in /var/www/navs/htdocs/sapphire/core/Object.php on line 115

Somewhere I'm going wrong big-time in my naming, but I'm not sure where?


22 November 2011 at 12:34am Community Member, 7 Posts

Yep, I've got this exact same problem - anyone got an answer?


5 April 2012 at 11:12am Community Member, 71 Posts

Did anyone find an answer to this? I'm having this same situation and can't fix it.