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.

DataObjectManager Module /

Discuss the DataObjectManager module, and the related ImageGallery module.

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

Automatically linking records (many_many)


Go to End


7 Posts   1411 Views

Avatar
Mad_Clog

Community Member, 78 Posts

18 June 2010 at 3:10am

Submission: http://pastie.org/private/0hrmsxz5p855dyacrsnnna
Author: http://pastie.org/private/hbwbxkknehakhw7ooh9i2q

I open up a submission, hit the Authors tab and add a record
Now when i save this record it gets added to the total list of Authors, however it's not linked with the currently active Submission from which i was editing.

Is there an option i'm missing or should i add an onBeforeWrite method in the Author class?
If so is there an easy way to link an Author to the Sumbission or should i manually write an INSERT query and execute this using the DB class?

Avatar
UncleCheese

Forum Moderator, 4102 Posts

18 June 2010 at 3:18am

Did you check it off in the MMDOM?

Avatar
Mad_Clog

Community Member, 78 Posts

18 June 2010 at 3:24am

What I'm looking for is adding the author record and linking it with the submission at the same time.
That way the user doesn't have to manually link the Author to the Sumbission once the Author has been added.

When that's done I can use MMDOM->set_only_related which enforces only linked records to be shown.
The reason behind this is that list of Authors can be come quite huge over time, so narrowing them down to only related records would be a big step forward in usability.

Avatar
UncleCheese

Forum Moderator, 4102 Posts

18 June 2010 at 3:58am

I did implement that on a recent project. Using onBeforeWrite().. I'll see if I can find a code snippet for you.

Avatar
UncleCheese

Forum Moderator, 4102 Posts

18 June 2010 at 4:03am

Here you go:

	public function onAfterWrite()
	{
		parent::onAfterWrite();
		if(isset($_POST['ctf'])) {
			if(!isset($_POST['ctf']['childID']))
				DB::query("INSERT INTO `YOUR_LINKING_TABLE` SET YourPageTypeID = ". $_POST['ctf']['sourceID'] . ", YourDataObjectID = $this->ID");
}

Avatar
Mad_Clog

Community Member, 78 Posts

18 June 2010 at 9:40am

Aye that's just what I was thinking about implementing, only using onBeforeWrite so you could check if it's a new record or an existing one.
Was hoping there would be a more elegant solution to this, but this will do the trick.
I'll have a go at this tomorrow.

Cheers!

Avatar
UncleCheese

Forum Moderator, 4102 Posts

18 June 2010 at 9:55am

Problem is, at onBeforeWrite(), you don't have an ID, so that's why there's the clever way of evaluating if the record is new.