Database 从Magento数据库获取查询——mysql\u num\u行

Database 从Magento数据库获取查询——mysql\u num\u行,database,magento,fetch,mysql-num-rows,Database,Magento,Fetch,Mysql Num Rows,什么函数与Magento中的mysql_num_行相等?对于Magento,正确的等价物是PHP函数 为什么? Magento通常使用Varien_Data_Collection实例获取包含多条记录的结果集。Varien为这些集合实现了,也就是说,在您真正需要结果集之前,不会获取任何结果集 如果您查看Varien\u Data\u Collection类,您会发现该类确实实现了PHP以及该接口的适当count()方法: class Varien_Data_Collection implement

什么函数与Magento中的mysql_num_行相等?

对于Magento,正确的等价物是PHP函数

为什么? Magento通常使用
Varien_Data_Collection
实例获取包含多条记录的结果集。Varien为这些集合实现了,也就是说,在您真正需要结果集之前,不会获取任何结果集

如果您查看
Varien\u Data\u Collection
类,您会发现该类确实实现了PHP以及该接口的适当
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\u num\u rows
。它首先获取结果集

现在,当您对集合调用
count()
时,例如通过

$n = count($collection);
PHP的核心
count()
函数将检测传递的参数
$collection
实现一个
Countable
接口,并定义了自己的
count()
方法,因此它将调用该方法

这将导致真正获取结果集*并将其存储到
$This->\u items
,最终允许计算记录并返回数字


*在Magento中,您还可以调用
foreach($collection as$product)
来真正获取结果集,但这是另一回事