Не удается загрузить все продукты в Indexcontroller


У меня есть простой контроллер индекса.

Когда я использую это:

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

Здесь показан не весь продукт (всего несколько), в чем может быть причина этого? Я хотел бы загрузить все продукты, независимо от статуса.

ОБНОВЛЕНИЕ: Благодаря Алану Шторму я нашел ответ. При использовании: echo (string) $collection->getSelect(); я видел: (_table_name.store_id = 5)

Установив для него значение StoreID 0 (так сказать, "администратор") Я смог увидеть весь продукт.

Звучит логично... как всегда :-)

Author: Bob van Luijt, 2013-08-05

2 answers

К сожалению, существует слишком много причин, чтобы перечислять (или даже знать), почему ваша коллекция продуктов может возвращать не все продукты, которые, по вашему мнению, должны быть возвращены. Это может быть ошибка, может быть расширение, которое вы установили, или у вас может быть недопонимание относительно того, что возвращается в коллекции по умолчанию.

К счастью, это относительно простая вещь для самостоятельной отладки. Вы можете взглянуть на оператор SELECT, используемый коллекцией для заполнения ее начальных объектов.

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

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

Имея в руках этот SQL, должно быть довольно легко понять, почему Magento не возвращает объекты, которые, по вашему мнению, должны быть возвращены.

 2
Author: Alan Storm, 2013-08-05 22:19:30

Существует несколько способов получить количество предметов в коллекции. К сожалению, внутренняя функция PHP count, вероятно, не самый эффективный способ.

Вот еще два варианта, которые можно попробовать:

echo $collection->count();

echo $collection->getSize();

Я подозреваю, что происходит либо ваша коллекция не так глубока, как вы думаете; существует проблема с памятью с функцией PHP count (повторяет коллекцию в виде массива); либо count не знает, сколько элементов на самом деле из-за ленивой загрузки , где коллекция фактически не загружается в то время, когда вы запрашиваете ее количество.

 0
Author: philwinkle, 2013-08-05 19:24:52