我需要一些幫助來顯示每個用戶在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