如何使用YII的createCommand也返回总项目?

时间:2013-03-07 21:16:08

标签: yii

假设我做了一个简单的查询:

$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项的计数。

6 个答案:

答案 0 :(得分:3)

为什么不轻松:

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

答案 1 :(得分:2)

您要么必须运行两个查询(没有限制的计数(*)查询,然后是有限的查询),或者您可以发送给您使用CSqlDataProvider检索您的产品并让它为您执行。但它通常需要两个查询。

注意: Yii 1.1.13中的一个非常好的功能是,如果您要使用数据提供者,可以将查询构建器命令发送到CSqlDataProvider。有关this pull request that fixed it的更多信息。这样,您既可以使用查询构建器的强大功能,也可以将数据转移到数据提供程序中。以前,您必须手动构建SQL语句或获取命令的queryText。

答案 2 :(得分:2)

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

答案 3 :(得分:0)

尝试使用 execute()而不是 query(),因为execute会返回rows count。 例如:

$rowCount = $command->execute();

答案 4 :(得分:-1)

您可以尝试使用COUNT:

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

希望有所帮助!

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

答案 5 :(得分:-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.