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

Automatically linking records (many_many)


Reply

7 Posts   975 Views

Avatar
Mad_Clog

18 June 2010 at 3:10am Community Member, 78 Posts

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

18 June 2010 at 3:18am 4085 Posts

Did you check it off in the MMDOM?

Avatar
Mad_Clog

18 June 2010 at 3:24am Community Member, 78 Posts

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

18 June 2010 at 3:58am 4085 Posts

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

Avatar
UncleCheese

18 June 2010 at 4:03am 4085 Posts

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

18 June 2010 at 9:40am Community Member, 78 Posts

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

18 June 2010 at 9:55am 4085 Posts

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.