从Magento数据库获取查询 - mysql_num_rows



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) 来真正获取结果集,但那是另一回事了。

最新更新