Magento中的什么函数等于mysql_num_rows?
对于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)
来真正获取结果集,但那是另一回事了。