我需要一些帮助来显示每个用户在CGridView中的帖子计数。将计数变量附加到对象
例如: 我有一个User和Post模型。 我可以通过$ user-> posts 访问用户的帖子有什么我可以添加有$ user-> num_posts
我需要一些帮助来显示每个用户在CGridView中的帖子计数。将计数变量附加到对象
例如: 我有一个User和Post模型。 我可以通过$ user-> posts 访问用户的帖子有什么我可以添加有$ user-> num_posts
您可以在Post模型中使用getter。 事情是这样的:
public static function getpostscount($id)
{
$total=0;
$provider=Post::model()->findall('user_id=:user_id',array(':user_id'=>$id));
foreach ($provider as $data)
{
if ($data->userid==$id)//userid name of column with user id in post model
{$total++;
}
}
return $total;
}
然后在你看来只是通过用户> id来吸气剂,它会回报你的职位数为这个用户。像这样的:
echo "User have".Post::model()->getpostscount($user->id);//$user->id is id of user for wich we will look count of posts
问候。
您应该简单地使用stat关系,例如,在您的用户模式:
public function relations()
{
return array(
// ...
'posts' => array(self::HAS_MANY, 'Post', 'user_id'),
'num_posts' => array(self::STAT, 'Post', 'user_id'),
// ...
);
}
http://www.yiiframework.com/doc/guide/1.1/fr/database.arr#statistical-query
编辑: 您还应该使用预先加载来建立你的数据提供器,例如:
$criteria=new CDbCriteria;
$criteria->with('num_posts');
关于SQL查询,这应该只使用3查询:
的gridview的页数只要看看Yii的日志就可以了。
难道你不能只是执行一个SQL语句,以避免从帖子(findall)获取所有数据,只是让SQL服务器返回一个计数?这会更快,imo。你怎么看? – JorgeeFG 2013-04-23 13:12:02
我没有测试与sql计数和这个getter的速度。在我的情况下,因为我有cgridview数以千计的用户和清单模型列表的计数他们。它工作正常,但我会尝试与SQL。谢谢。 – ineersa 2013-04-23 13:16:51
对不起,我说谎,因为我有这个SQL语句'$ provider = Lists :: model() - > findall('user_id =:user_id', array(':user_id'=> $ criteria));'。 – ineersa 2013-04-23 13:22:45