Основная проблема для меня в CakePHP — это осуществление pagination штатными средствами для таблиц связанных HABTM.
Не знаю как лучше — назвать эту заметку переводом, или расширенным переводом. Я использую две статьи, плюс свои плюшки. Поэтому ссылки я проставлю, а перевод это, или компиляция — не столь важно, как мне кажется.
После недолгого шуршания по Интернету я нашёл решение вот по этому адресу:
Pagination for HABTM. Хочу отметить что решение работает и для последней (на текущий момент) версии CakePHP 1.3.4.
Однако тут есть нюанс, который очень сильно портит малину. Если элемент связан с несколькими другими, то штатный педжинатор неправильно считает количество элементов, потому как они дублируются. Но и для этого есть решение
DISTINCT in pagination.
Итак, переходим к задаче.
Что у нас есть на входе?
CakePHP 1.3.4 версии, MySQL 5.1.37
Есть категория товара («Принтеры лазерные», «Картриджи» и т.д.), есть производитель («HP», «Xerox»), есть виды характеристик («Формат печати», «Цветность»), есть сами эти характеристики — («А4», «А3» и, соответственно «Цветной», «Монохромный»), и есть сам товар, который лежит в одной из категорий, имеет одного производителя, может иметь характеристику (принтеры имеют формат печати в списке характеристик, а телефоны — нет), а характеристика, соответственно имеет свой список (для формта — «А4», «А3»).
Что нам необходимо? Необходимо чтобы делалась выборка (с работающей педжинацией) по следующему запросу (например): показать категорию товара 1, выбрать только производителя 2, показать товар, у которого есть в параметрах что-то из списка атрибутов («А4» или «А4» и «А3»).