我有Community
模型和Content
模型。每个Content
都有一个community_id
列。我创建了这个简单的关系:
$relations['contents'] = array(self::HAS_MANY, 'Content', 'community_id','order'=>'weight DESC, id DESC');
(注意订单)
在我要显示的CommunityController
中说出前20个内容(然后在另一个ajax动作中获得下一个20,不用担心)。
我可以通过Criteria来做,比如:
$criteria = new CDbCriteria;
$criteria->compare('community_id',$model->id);
$criteria->limit = 20;
$criteria->order = 'weight DESC, id DESC';
$contents = Content::model()->findAll($criteria);
但代码对我来说太过分了(太久了),我觉得我并没有使用我创建的所有关系。有更简单的方法吗?或者我在找不到问题的地方?
答案 0 :(得分:1)
您可以使用CActiveRecord::getRelated()
并添加新条件作为最后一个参数。您的代码可能类似于
$criteria = new CDbCriteria;
$criteria->limit = 20;
$contents=$model->getRelated('contents',true,$criteria);
答案 1 :(得分:1)
您可以将关系用作方法并在那里传递标准:
$contents = $model->contents(array('limit' => 20));