2013-02-18 87 views
2

我有一个Community模型和Content模型。每个Content有一个community_id列。我创造了这个简单的关系:浏览Yii关系限制

$relations['contents'] = array(self::HAS_MANY, 'Content', 'community_id','order'=>'weight DESC, id DESC'); 

(注意顺序)

CommunityController我想显示说,前20名的内容(然后在另一个阿贾克斯行动得到未来20,没有关于后顾之忧) 。

我大概可以通过标准做到这一点,是这样的:

$criteria = new CDbCriteria; 
$criteria->compare('community_id',$model->id); 
$criteria->limit = 20; 
$criteria->order = 'weight DESC, id DESC'; 
$contents = Content::model()->findAll($criteria); 

但代码看起来矫枉过正我(太长了),我觉得我不是在我创建的所有关联使用。有一种更简单的方法吗?或者我在哪里找不到问题?

回答

1

您可以使用您的关系作为一种方法,并通过标准有:

$contents = $model->contents(array('limit' => 20)); 
1

您可以使用CActiveRecord::getRelated()并添加新条件作为最后一个参数。您的代码可能看起来像

$criteria = new CDbCriteria; 
$criteria->limit = 20; 
$contents=$model->getRelated('contents',true,$criteria);