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.

We're retiring the forums!

The SilverStripe forums have passed their heyday. They'll stick around, but will be read only. We'd encourage you to get involved in the community via the following channels instead:

Data Model Questions /

Moderators: martimiz, Sean, Ed, biapar, Willr, Ingo, swaiba

DataObjectDecorator and has_many

Go to End

2 Posts   2210 Views


Community Member, 78 Posts

6 August 2010 at 9:42pm

Edited: 06/08/2010 9:43pm


i want to create an "Reminder" extension.
In our project are many custom DataObjects handled inside ModelAdmin.
To some of them i want to add a "Reminder" functionality.

I decided to create a DataObjectDecorator, but i get errors.

Here are the code Snippets:

The Reminder DataObject itself:

class Reminder extends DataObject {

    public static $db = array(
        'Title'     => 'Varchar(256)',
        'Deadline'  => 'SS_Datetime',
        'Message'   => 'HTMLText',
        'Priority'  => 'Enum("low,medium,high","medium")'

    public static $has_one = array(



The Decorator:

class ReminderExtension extends DataObjectDecorator {

	function extraStatics() {
		return array(
			'has_many' => array(
				'Reminders' => 'Reminder'


        public function updateCMSFields(FieldSet $fields) {

            $table = new HasManyDataObjectManager($this->owner, 'Reminders', 'Reminder', array('Title' => 'Title'));
            $fields->addFieldToTab('Root.Content.Reminders', $table);


And inside of some Dataobjects i deine the extension/the decorator

     static $extensions = array(

But when klicking inside ModelAdmin of an Dataobject to edit:

Warning: "array_flip() [function.array-flip]: The argument should be an array" at line 1334 of....../html/sapphire/core/model/DataObject.php

I am working with SS 2.4.1

Any ideas ?


Community Member, 288 Posts

12 August 2010 at 12:05am

This is tricky since the way SS handles has_many. Adding has_many to a class doesn't actually do anything database wise, the system expects a has_one on the other side to know what to do and it's when the has_one is created that the correct stuff shows up in the db.

In short I'm not sure if this is doable in this manner.