Magento 中什么函数等于 mysql_num_rows?
最佳答案
对于 Magento,正确的等价物是 PHP 的 count()
功能。
为什么?
Magento 通常使用 Varien_Data_Collection
实例来获取包含多条记录的结果集。 Varien 实现了 Lazy Load Pattern对于这些集合,也就是说,在您真正需要之前不会获取任何结果集。
如果您查看 Varien_Data_Collection
类,您会发现该类确实实现了 PHP 的 Countable interface。以及此接口(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);
PHP 的核心 count()
函数会检测传递的参数 $collection
实现了一个 Countable
接口(interface),并有自己的 count ()
方法已定义,因此它将调用该方法。
这导致真正获取结果集*并将其存储到$this->_items
,最终允许对记录进行计数并返回数字。
* 在 Magento 中,您还可以调用 foreach ($collection as $product)
来真正获取结果集,但那是另一回事了。
关于database - 从 Magento 数据库获取查询——mysql_num_rows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11165052/