CakePHP - рекурсивный по конкретным полям в модели? - PullRequest
3 голосов
/ 19 апреля 2010

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

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

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

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

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

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

Ответы [ 2 ]

9 голосов
/ 19 апреля 2010

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

3 голосов
/ 20 апреля 2010

Иногдаableable генерирует слишком много запросов. Другой вариант для достижения того, что вы хотите - это отсоединить модель 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 .

...