2010-04-19 2 views
3

Я довольно новичок в CakePHP, но я думаю, что я начинаю его разглядывать. Я пытаюсь рекурсивно вывести информацию о связанных таблицах, но я хочу указать, какие связанные модели должны выполнять рекурсию. Позвольте мне привести пример, чтобы продемонстрировать свою цель:CakePHP - рекурсивный по определенным полям в модели?

У меня есть модель «Клиент», которая имеет информацию, как название компании, веб-сайт и т. Д. «Клиент» имеет множество «Адресов», которые содержат информацию для отдельных контактов, таких как Contact Имя, улица, город, штат, страна и т. Д. «Клиент» также принадлежит «CustomerType», который имеет только описание описательной категории - имя и описание, например «Дистрибьютор» или «Производитель».

Когда я нахожусь в «Заказчике», я хочу связать информацию «CustomerType» и «Address» как суб-массивы, и это прекрасно работает, создавая hasMany и правильно присваивая ассоциации. Но теперь, вот моя проблема: я хочу получить информацию о стране/стране. Итак, вместо каждой строки массива «Адрес», просто имеющей «state_id», я хочу, чтобы у нее было «состояние» => массив («id» = 20, «name» = «New York», ...) и т. Д.

Если я устанавливаю $ рекурсивное значение более высокого значения (например, 2) в модели Partner, я получаю то, что я хочу для информации о состоянии/стране в каждом «адресе». НО он также повторяется в «CustomerType», и это приводит к полю «CustomerType» моего объекта «Partner», имеющему огромный массив всех объектов Customer, которые соответствуют этому типу, которые могут быть тысячи длинными.

Итак, дело не в том, что я НЕ хочу возвращаться на «CustomerType», только на «Address». Есть ли способ, которым я могу это настроить?

Извините за затянутый вопрос, и спасибо заранее!

ответ

9

Я предлагаю вам использовать поведение «Containable»; см. Дополнительную помощь на сайте пирога в книге: http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html

+0

Спасибо за быстрый ответ. Я вообще об этом не знал, но после нескольких минут работы с ним он уже много помогает. Благодаря! –

3

Иногда сдерживаемый генерирует слишком много запросов. Еще одна возможность добиться того, что вы хотите, - это отменить модель CustomerType. Вы можете найти более подробную информацию здесь: http://teknoid.wordpress.com/2008/07/17/forcing-an-sql-join-in-cakephp/, http://mark-story.com/posts/view/using-bindmodel-to-get-to-deep-relations.