2013-03-07 78 views
3

比方说,我做了一个简单的查询:如何使用YII的createCommand也返回总项目?

$products = 
Yii::app()->db->createCommand()->setFetchMode(PDO::FETCH_OBJ) 
    ->select('*') 
    ->from('products') 
    ->limit(9) 
    ->queryAll(); 

比方说,有500种产品在数据库中。如果包含“限制”,是否有办法让YII自动返回产品总数(计数)?也许返回这样一个对象:

$products->products = array(... products ...) 
$products->totalProducts = 500; 

的问题是,如果包括LIMIT,它将返回的项目,因此数为9。我想一个解决方案,由此它会返回9个项目,而且还如果有200个项目,说200个项目的计数。

回答

2

你要么必须运行两个查询(不限制一个COUNT(*)查询,然后在有限的查询),也可以发送您可以检索你的产品使用CSqlDataProvider,并让它为你做。但它通常需要两个查询。

注:在Yii中1.1.13的漂亮的功能之一是,你可以把你的查询生成器命令到CSqlDataProvider如果你打算使用一个数据提供器。有关this pull request that fixed it的更多信息。这样,您既可以使用查询生成器的强大功能,又可以将数据转换为数据提供者。以前,您必须手动构建SQL语句或获取命令的queryText。

-1

你可以尝试使用COUNT这样的:

$dbCommand = Yii::app()->db->createCommand(" 
SELECT COUNT(*) as count FROM `products`"); 
$data = $dbCommand->queryAll(); 

希望帮助!

编辑:您可能会发现这太有用:CDataProvider

1
Yii::app()->db->createCommand('select count(*) from tbl_table')->queryScalar(); 
0

尝试使用执行的()代替查询()因为执行返回的行数。 例如:

$rowCount = $command->execute(); 
-1

试试这个 -

$sql = Yii::app()->db->createCommand('select * from tbl_table')->queryAll(); //It's return the Array 

echo count($sql); //Now using count() method we can count the array. 
3

为什么不是一件容易的:

$сount = Yii::app()->db->createCommand('select count(*) from table')->queryScalar(); 
echo $count;