从Magento数据库获取查询 - mysql_num_rows

时间:2012-06-22 22:40:17

标签: database magento fetch mysql-num-rows

什么函数等于Magento中的mysql_num_rows?

1 个答案:

答案 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}}来真正获取结果集,但这是另一个故事。