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   1145 Views

Avatar
jacobsjensen

Community Member, 20 Posts

10 September 2009 at 7:41am

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

Forum Moderator, 922 Posts

11 September 2009 at 12:19am

Edited: 11/09/2009 12:21am

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