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.

General Questions

General questions about getting started with SilverStripe that don't fit in any of the categories above.

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

Getting id's from a many to many relation


Reply

2 Posts   1119 Views

Avatar
jacobsjensen

10 September 2009 at 7:41am Community Member, 20 Posts

Hello guys,

Need a little help getting some IDs from a relation table.

The below code is what i use for a home page. In the administration you can now select multible pages, and the IDs are saved to the relation table "ForsidePage_PreviewList".
i need to use the IDs from this table in my filter in "ForsidePage_Controller" in the function "showPreviews", and not the hardcoded ...".ID IN (8,9,10)" ...

How can this be done?

class ForsidePage extends Page {
static $db = array();

static $has_one = array();

   public static $many_many = array(
      'PreviewList' => 'SiteTree'
   );

function getCMSFields() {
    $fields = parent::getCMSFields();
    $fields->addFieldToTab('Root.Content.Previews', new TreeMultiselectField( 'PreviewList', 'Preview Sites', 'SiteTree'));

    return $fields;
   }
}

class ForsidePage_Controller extends Page_Controller {
   function showPreviews() {
   $myIds = "";// Query to get IDs from the relation table
    $records = DataObject::get("WithPreviewPage", "`WithPreviewPage`.ID IN (8,9,10)");
    return ($records);
   }

}

Avatar
Sean

11 September 2009 at 12:19am (Last edited: 11 September 2009 12:21am), Forum Moderator, 921 Posts

What you're looking for is a method on the relational getter called getIdList(). To get an array of the IDs of the relation, simply call that method like so (on your controller):

$this->dataRecord->getManyManyComponents('PreviewList')->getIdList();

Then you can just implode the array into a comma separated ID string ready for your SQL query.

Sean