1

Magento中什么函数等于mysql_num_rows?

4

1 回答 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 回答