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, Ed, biapar, Willr, Ingo, swaiba

Model Admin - so many questions, so little documentation

Go to End

18 Posts   10338 Views


Community Member, 11 Posts

13 August 2010 at 1:43am

Hi swaiba,

I already found a solution.
I already have a class ItemAdmin extending ModelAdmin.
I created a class ItemAdmin_CollectionController extending ModelAdmin_CollectionController class.

Then I override ModelAdmin_CollectionController class by setting $collection_controller_class under class ItemAdmin
public static $collection_controller_class ="ItemAdmin_CollectionController"

I overloaded getSearchQuery() >>
function getSearchQuery( $searchCriteria ) {

$query = parent::getSearchQuery( $searchCriteria )->leftJoin( 'Category', 'Category.ID = Product.CategoryID' );
return $query->orderby( 'Category.Name, Product.Name ASC' );


It worked!

There's also another way though. You can extend TableListField and set $resultsTableClassName to class name you created.
You can then overload function getQuery() like this >>
function getQuery() {
$this->customQuery->leftJoin( 'Category', 'Category.ID = Product.CategoryID');
$this->customQuery->orderby( 'Category.Name, Product.Name ASC' );
return parent::getQuery();

I hope this helps to everyone who will encounter this issue.


Forum Moderator, 1899 Posts

13 August 2010 at 2:19am

Edited: 24/09/2010 12:53am

nice one! that is a very simple example - thanks for posting the solution :)

this has worked very well for what I wanted, I did also add a condition to ensure that the extra condirtion is only applied to the intended managed model...

if ($this->modelClass == 'DataObjectName') 
   $query->where[] = "myfield = xyz"; 

Go to Top