database - 从 Magento 数据库获取查询——mysql_num_rows

标签 database magento fetch mysql-num-rows

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/

相关文章:

sql - 查询以查找列的 nᵗʰ 最大值

magento - 如何在产品列表中添加产品评级?

javascript - NEXT JS req.body undefined

javascript - DOM 准备好之前获取 DOM 准备好之后回调

php - 匹配数据库中的值并使用 codeigniter 获取该行中的所有数据

java - 使用 Java 的外键引用

php - 我的数据库模型(很糟糕)让人头疼,如何改进它?

jquery - chrome中的div位置问题

MySQL十进制(24,16)产生奇怪的结果

database - Flutter:将数据从第一屏幕发送到第二屏幕