什么函数等于Magento中的mysql_num_rows?
答案 0 :(得分:2)
对于Magento,正确的等价物是PHP的count()
函数。
Magento通常使用Varien_Data_Collection
个实例来获取包含多个记录的结果集。 Varien为这些集合实现Lazy Load Pattern,也就是说,在您真正需要之前不会获取任何结果集。
如果您查看Varien_Data_Collection
类,您会看到,此类确实为此接口实现了PHP的Countable interface和正确的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);
时,例如由
count()
PHP的核心$collection
函数将检测到传递的参数Countable
实现了count()
接口并定义了自己的$this->_items
方法,因此它将调用该方法。 / p>
这导致真正获取结果集 * 并将其存储到foreach ($collection as $product)
,最终允许对记录进行计数并返回数字。
*在Magento中,您也可以调用{{1}}来真正获取结果集,但这是另一个故事。