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've moved the forum!

Please use forum.silverstripe.org for any new questions (announcement).
The forum archive will stick around, but will be read only.

You can also use our Slack channel or StackOverflow to ask for help.
Check out our community overview for more options to contribute.

Data Model Questions /

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

DataObjectDecorator and has_many


Go to End


2 Posts   2502 Views

Avatar
rob.s

Community Member, 78 Posts

6 August 2010 at 9:42pm

Edited: 06/08/2010 9:43pm

Hi,

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(
        'ReminderExtension'
     );

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 ?

Avatar
MarcusDalgren

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.