2

我有一个Community模型和一个Content模型。每个Content都有一community_id列。我创建了这个简单的关系:

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

(注意订单)

CommunityController我要显示的内容中说前 20 个内容(然后在另一个 ajax 操作中获取下一个 20,不用担心)。

我可能可以通过标准来做到这一点,比如:

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

但是代码对我来说看起来有点矫枉过正(太长了),我觉得我根本没有使用我创建的关系。有没有更简单的方法?还是我在寻找不存在的问题?

4

2 回答 2

1

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

$criteria = new CDbCriteria;
$criteria->limit = 20;
$contents=$model->getRelated('contents',true,$criteria);
于 2013-02-18T14:07:15.217 回答
1

您可以将您的关系用作一种方法并在那里通过标准:

$contents = $model->contents(array('limit' => 20));
于 2013-02-20T09:48:34.253 回答