CakePHP - рекурсивный по конкретным полям в модели?

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

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

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

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

Итак, суть в том, что я НЕ хочу использовать "CustomerType", а только "Address". Есть ли способ настроить это?

Извините за многословный вопрос, заранее спасибо!


person Paul Willy    schedule 19.04.2010    source источник


Ответы (2)


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

person Andrei Diaconescu    schedule 19.04.2010
comment
Спасибо за быстрый ответ. Я вообще не знал об этом, но после того, как я поигрался с этим в течение нескольких минут, это уже мне очень помогает. Спасибо! - person Paul Willy; 19.04.2010

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

person bancer    schedule 19.04.2010