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're retiring the forums!

The SilverStripe forums have passed their heyday. They'll stick around, but will be read only. We'd encourage you to get involved in the community via the following channels instead:

Archive /

Our old forums are still available as a read-only archive.

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

How to use ComponentSet?

Go to End

3 Posts   3447 Views


Community Member, 11 Posts

24 October 2008 at 10:53am

Edited: 24/10/2008 11:12am

Books can have many categories. Categories can have many books.

I'd like to return a list of books from a specific category.

I have Book.php (extends Page), Category.php (extends DataObject).

BookHolder.php Controller

function getBooksByCategory($categoryID){
  $whereStatement = "CategoryID ='". $categoryID ."'";
  return DataObject::get("Books", $whereStatement); // Do I replace DataObject with ComponentSet?

The ComponentSet page in the documentation doesn't explain much.

I read that ComponentSet has to do with Many_Many relationships.

Any examples are greatly appreciated!



Community Member, 11 Posts

24 October 2008 at 6:51pm

This did the trick

function getBooksByCategory($categoryID){
$ByCategoryID = DataObject::get_one('Category', 'ID="'.$categoryID.'"');
if($ByCategoryID) {
return $ByCategoryID->getManyManyComponents('Books');


Community Member, 69 Posts

27 October 2008 at 1:44pm

Edited: 27/10/2008 1:45pm

This is much cleaner

return $ByCategoryID->Books();