Hi all,
In my database have 2 table: book and chapter. Each book has many chapter. How can I sort the book by number of chapter? I can do this by SQL, but using ActiveRecord is different.
Thank you.
Hi all,
In my database have 2 table: book and chapter. Each book has many chapter. How can I sort the book by number of chapter? I can do this by SQL, but using ActiveRecord is different.
Thank you.
Look at the AR section of the guide - relations() under relational AR. You could define a STAT relation to get that info.
// example
public function beforeFind()
{
$this->getCDbCriteria()->order='chapter DESC';
return parent::beforeFind();
}
Use defaultScope
Use a custom criteria with your find, findAll, findByPk, etc… methods. They all accept a criteria.
But, be very careful using that with a CGridView or CViewList, once you click on order, the order sql statement will be included twice: http://www.yiiframework.com/doc/api/1.1/CActiveRecord#c4209
dniznick: I already defined a STAT relation to get chapter count, but when applied to a CActiveDataProvider it get an error.
This is my code
$criteria = new CDbCriteria();
.............
// I already a STAT relation named chapterNum in Book model
// $_GET['sort'] equal 'chapterNum'
$sort=new CSort('Book');
if (isset($_GET['sort'])) {
$sort->attributes=array($_GET['sort']);
}
else{
$sort->attributes=array('book_name');
}
$books = new CActiveDataProvider('Book', array(
'criteria' => $criteria,
'pagination' => array(
'pageSize' => 20,
),
'sort'=>$sort,
));
@Antonio Ramirez
I sort the book by quantity of book’s chapters. But I can’t do this in order statement. Can you explain it more clearly?
Finally, I got the solution though it looks like a trick, I hope Qiang Xue will fix this problem soon.
http://www.yiiframework.com/forum/index.php?/topic/7061-csort-and-selfstat-to-sort-by-count/