0

我需要一些帮助来显示 CGridView 中每个用户的帖子数。

例如:我有一个 User 和 Post 模型。我可以通过 $user->posts 访问用户的帖子有什么我可以添加到 $user->num_posts

4

2 回答 2

2

您应该简单地使用统计关系,例如在您的用户模型中:

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页数,
  • 一个查询来获取用户模型,
  • 一项获取用户 num_posts 的查询。

只需查看 Yii 日志即可确定。

于 2013-04-23T13:30:44.010 回答
-1

您可以在 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;
    }

然后在您的视图中,只需将 user->id 传递给 getter,它就会返回该用户的帖子数。像这样的东西:

echo "User have".Post::model()->getpostscount($user->id);//$user->id is id of user for wich we will look count of posts

问候。

于 2013-04-23T13:10:24.547 回答