Как сделать вложенное предложение Where в коллекции Magento, используя addAttributeToFilter или аналогичные функции - PullRequest
0 голосов
/ 01 августа 2011

Мне необходимо отфильтровать коллекцию товаров по нескольким вложенным критериям ИЛИ и AND.Я пытался сделать это, используя чистый SQL-оператор, и я думаю, что смогу это сделать, но, поскольку я заканчиваю работу на сегодня, я подумал, что, возможно, кто-то здесь найдет лучшее решение, и я проснусь завтра и получу ответ: P.

Моя проблема в том, что метод addAttributeToFilter (), предоставляемый классом Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection, позволяет только два раза вкладывать предложение where, поэтому я могу иметь

(cond1 OR cond2 OR cond3) AND (cond4 OR cond5) AND cond6

, но не

cond1 AND (cond2 OR(cond3 AND cond4))
1008 * (или я не знаю, как это сделать).

Как я уже говорил, я начал играть с чистым SQL-оператором, чтобы получить идентификаторы продуктов, поэтому я могу просто добавить атрибутAttributeToFilter с условием «in».Но Magento DB такой беспорядок!Я имею в виду, что это нормально, пока вы не проследите каждое отношение через таблицы googol: P.

Я думал, что у объектов коллекции Zend могут быть некоторые функции, которые мне нужны, но я не слишком знаком с Zend (мой плохой).

Итак, кто-нибудь спасет меня от написания 300-строчного SQL-запроса?Я всегда хотел сделать это, но я думаю, что могу немного отложить это:).

Cheers, Maćko

РЕДАКТИРОВАТЬ: я должен получить информацию о продуктах, и в этом объединенном состоянии будетнекоторые пользовательские опции из стороннего модуля, такие как: целевой возраст и т. д. Я думаю, что мне придется делать это на стороне PHP, но мне это не очень нравится - на данный момент есть 37 продуктов, которые могут быть отфильтрованы изначально, но чтоесли было бы около 1000 товаров, соответствующих этим начальным критериям?

1 Ответ

2 голосов
/ 01 августа 2011

Немного больше информации об информации, которую вы пытаетесь получить, будет полезно.Возможно, у Magento есть какая-то сгенерированная таблица для конкретных данных, на которые вы хотите указать, но это сильно зависит от вашего индивидуального случая.

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

Надеюсь, что это поможет!

Спасибо, Джо


Похоже, ваша забота - эффективностьвыполнение запроса столько же, сколько что-либо.Если это так, убедитесь, что таблицы проиндексированы с умом (используйте индекс и внутренний запрос, который выбирает как можно меньше записей).

Звучит как пользовательский запрос SQL (или даже восстановленный индекс).похоже на Magento) может быть путь сюда.

...