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

One set of categories applying to 2 sets data


Go to End


2 Posts   1527 Views

Avatar
phawley

Community Member, 21 Posts

4 July 2010 at 2:09pm

I'm wondering how exactly to make the many_many example apply to a situation in which I need *one* common set of categories that can be applied to 2 distinct sets of info (Articles and Videos).

I've tried just allowing the belongs_many_many to point to Articles (and crossing fingers) but when a new Category entry is created from Articles, the record is created with a Title of NULL, and same result from Videos, but 2 records are created.

Thanks very much,
Patrick

Avatar
phawley

Community Member, 21 Posts

5 July 2010 at 3:48pm

Edited: 05/07/2010 3:48pm

Okay...solved it myself with some better forum searches and rewriting it slightly differently:

Article.php (Video.php is same but with Video replacing Article obviously)

<?php
 
class Article extends Page {
 
  static $db = array(
    'Author' => 'Text'
  );

  static $many_many = array(
    'Topics' => 'Topic'
  );

  static $allowed_children = 'none';

  function getCMSFields() {
    $fields = parent::getCMSFields();
    $fields->addFieldToTab('Root.Content.Main', new TextField('Author'), 'Content');
    $topicsTablefield = new ManyManyComplexTableField(
      $this,
      'Topics',
      'Topic',
      array(
        'TopicName' => 'Topics'
      ),
      'getCMSFields_forPopup'
    );
    $topicsTablefield->setAddTitle( 'A Topic' );

    $fields->addFieldToTab( 'Root.Content.Topics', $topicsTablefield );

    return $fields;
  }
  
}
 
class Article_Controller extends Page_Controller {
 
}
 
?>

Topic.php

<?php
 
class Topic extends DataObject {

  static $db = array(
   'TopicName' => 'Text'
  );
  
  static $belongs_many_many = array(
    'Articles' => 'Article'
  );

  function getCMSFields_forPopup() {
   $fields = new FieldSet();
   $fields->push( new TextField( 'TopicName', 'Topic' ) );
   return $fields;
  }

}

Hope providing this code helps someone else,
Patrick