Magento中什么函数等于mysql_num_rows?
问问题
3114 次
1 回答
2
对于 Magento,适当的等价物是 PHP 的count()
函数。
为什么?
Magento 通常使用Varien_Data_Collection
实例来获取包含多条记录的结果集。Varien 为这些集合实现了延迟加载模式,也就是说,在您真正需要之前不会获取任何结果集。
如果你看一下这个Varien_Data_Collection
类,你会发现,这个类确实实现了 PHP 的Countable 接口和这个接口的正确count()
方法:
class Varien_Data_Collection implements IteratorAggregate, Countable
{
:
public function count()
{
$this->load();
return count($this->_items);
}
:
}
如果您现在问自己,延迟加载与计数记录有什么关系,那么您需要知道以通常的 Magento 方式查询集合,例如:
$collection = Mage::getModel('catalog/product')
->getCollection()
->addFieldToFilter(
'status',
Mage_Catalog_Model_Product_Status::STATUS_ENABLED
);
根本不获取结果集。但是,您如何计算尚未获取的结果集的记录?对,你不能。也不能mysql_num_rows
。它首先获取结果集。
现在,当您调用count()
集合时,例如通过
$n = count($collection);
PHP 的核心count()
函数将检测传递的参数$collection
实现了一个Countable
接口并定义了自己的count()
方法,因此它将调用该接口。
这导致真正获取结果集*并将其存储到$this->_items
,这最终允许对记录进行计数并返回数字。
* 在 Magento 中,您也可以调用foreach ($collection as $product)
以真正获取结果集,但这是另一回事。
于 2012-06-23T08:58:02.613 回答