我有一个简单的indexController。

当我使用它时:

$collection = Mage::getModel('catalog/product')
                        ->getCollection()
                        ->addAttributeToSelect('*');
echo count($collection);

它没有显示所有产品(仅几个),这可能是什么原因?我想加载所有产品,无论状态如何。

更新:感谢Alan Storm,我找到了答案。在使用: echo (string) $collection->getSelect(); 我看见: (_table_name.store_id = 5)

通过将其设置为StoreID 0(可以说是“管理”),我可以看到所有产品。

听起来很合乎逻辑...一如既往:-)

有帮助吗?

解决方案

不幸的是,有太多原因列出(甚至知道)为什么您的产品收集可能不会返回您认为应该应该的所有产品。这可能是一个错误,可能是您安装的扩展名,或者您对默认集合中返回的内容有误解。

幸运的是,这是一个相对简单的事情来调试自己。你可以窥视 SELECT 集合使用的语句填充其初始对象。

$collection = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*'); 

echo (string) $collection->getSelect();  

掌握了该SQL,应该很容易说出为什么Magento不会返回您认为应该的对象。

其他提示

有多种方法可以获取集合中的项目计数。不幸的是PHP内部 count 功能可能不是最性能的方式。

这是其他两个可以尝试的:

echo $collection->count();

echo $collection->getSize();

我怀疑正在发生的事情是您的收藏不如您想象的那么深。 PHP有记忆问题 count 函数(将集合作为数组迭代);或者 count 不知道实际上有多少个物品 由于懒惰加载, ,当您要求其计数时,该集合实际上并未加载。

许可以下: CC-BY-SA归因
scroll top