Отображение 4-го уровня массива в CakePHP с использованием отношения - PullRequest
0 голосов
/ 01 июня 2011

У меня есть таблица проекта, снимок экрана, sub_screenshot и пользовательЯ хочу добиться такой диаграммы.Это как получить 4-й уровень.

[Model]     
     Array
                (
                    [0] => Array
                        (
                            [Project] => Array
                                (
                                    [id] => 2
                                )
                            [Screenshot] = Array
                                (
                                    [0] => Array
                                       (
                                             [Screenshot] => Array 
                                                  (
                                                     [project_id] => 2
                                                     [id] => 1
                                                  )
                                             [SubScreenshot] = Array
                                                  (
                                                         [0] => Array 
                                                               (
                                                                  [id] = 1
                                                                  [project_id] = 2
                                                                  [screenshot_id] = 1
                                                               )
                                                         [1] => Array 
                                                               (
                                                                  [id] = 2
                                                                  [project_id] = 2
                                                                  [screenshot_id] = 1
                                                               )
                                                  )

                                       )
                                    [1] => Array
                                       (
                                             [Screenshot] => Array 
                                                  (
                                                     [project_id] => 3
                                                     [id] => 1
                                                  )
                                             [SubScreenshot] = Array
                                                  (
                                                         [0] => Array 
                                                               (
                                                                  [id] = 1
                                                                  [project_id] = 3
                                                                  [screenshot_id] = 1
                                                               )
                                                         [1] => Array 
                                                               (
                                                                  [id] = 2
                                                                  [project_id] = 3
                                                                  [screenshot_id] = 1
                                                               )
                                                         [2] => Array 
                                                              (
                                                                 [id] = 2
                                                                 [project_id] = 3
                                                                 [screenshot_id] = 1
                                                              )
                                                  )

                                       )
                              )
                          [User] => Array 
                             (
                                  [id] => 1
                             )
                      )
                )

С уважением,

Ответы [ 2 ]

0 голосов
/ 01 июня 2011

Используйте сдерживаемое поведение.У меня тоже было несколько вопросов по этому поводу в последнее время.Было бы гораздо эффективнее установить рекурсивное значение 4, поскольку вы будете включать только те модели, которые вам нужны.

Следуйте этим инструкциям, чтобы настроить поведение на своих моделях.http://book.cakephp.org/view/1323/Containable

Затем вы сможете выполнить поиск и получить желаемую структуру.

$this->Project->find(
    'all',
    array(
        'conditions' => array(
            //put your conditions in here
        ),
        'contain' => array(
             'User',
             'Screenshot',
             'Screenshot.SubScreenshot'
             'Scrrenshot.SubScreenshot.User'
    )
);

Существует несколько способов использования синтаксиса модели.Вы можете добавить массивы в содержащиеся модели, чтобы добавить условия и / или дополнительную глубину.

0 голосов
/ 01 июня 2011

Чтобы дать вам некоторое представление, я предлагаю вам использовать обратный вызов afterFind()

http://book.cakephp.org/view/1050/afterFind

После поиска установите пользователя, где вы хотите сделать другую находку с моделью пользователя.

Я не знаю, существует ли какая-либо конфигурация для изменения $recursive без изменения в ядре.

EDIT

Вы можете создать общий afterFind в AppModel, когдаВы можете проверить, есть ли у вас $ recursive = 4, скопировать основные функциональные возможности отношений и сгенерировать их.

...