Использование атрибута рекурсивной модели в CakePHP - PullRequest
1 голос
/ 30 ноября 2011

Я использую CakePHP 2.0 и MySQL. У меня есть следующие таблицы:

Stores
-id
-name
-suburb_id

Outlets
-id
-name
-suburb_id

Suburbs
-id
-name
-state_id

States
-id
-code
-name

Штаты имеют много пригородов и пригородов имеет много магазинов. Когда я выполняю следующую находку:

$this->Outlet->recursive = 0;
$stores = $this->Store->find("all", array('limit' => 50));

Извлекает массивы данных Outlet, Suburb, Store и State.

[Outlet] => Array
(
    [id] => 3
    [name] => SMOKEYS KEBABS PIZZA /PIDE
    [suburb_id] => 1212
)
[Suburb] => Array
(
    [id] => 1212
    [state_id] => 1
    [name] => Wiangaree
    [State] => Array
    (
        [id] => 1
        [code] => ACT
        [name] => Australian Capital Territory
    )
    [Store] => Array
    (
        [0] => Array
        (
            [id] => 12814
            [name] => Wiangaree General Store
            [suburb_id] => 1212
        )
    )
)

Есть ли какой-либо способ контролировать то, что он получает? По сути, я хотел бы, чтобы Outlets, связанные данные Пригород и связанные данные состояния.

Или я ошибаюсь? Другой вариант, о котором я подумал, будет реализован в виде специальных соединений.

1 Ответ

4 голосов
/ 30 ноября 2011

При работе со связанными моделями, скажем modelA и modelB, если вы хотите использовать find() с modelA, вам следует установить свойство recursive в этой модели, а не в modelB.

Таким образом, в вашем коде вы должны установить его так:

$this->Store->recursive = 0;
$stores = $this->Store->find("all", array('limit' => 50));

Вы также можете больше контролировать то, что извлекается, используя Containable поведение или fields параметр метода find().

...