Cakephp: несколько уровней принадлежностей в модели - PullRequest
2 голосов
/ 22 января 2011

В модели возможно ли сделать несколько итераций для принадлежит?

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

 alerts.schedule_id -> schedules.tasks_id -> tasks.name

Я попробовал этот синтаксис:

var $belongsTo = array( 
         'Schedule' => array( 
             'className' => 'Schedule', 
             'foreignKey' => 'schedule_id' 
         ), 
         'Task' => array( 
             'className' => 'Task', 
             'foreignKey' => 'task_id' 
         ));

Но это просто объединяет расписания и задачи непосредственно с оповещениями (вот сгенерированный sql:

LEFT JOIN `schedules` AS `Schedule` ON (`Alert`.`schedule_id` = `Schedule`.`id`) LEFT JOIN `tasks` AS `Task` ON (`Alert`.`task_id` = `Task`.`id`)
)

Ответы [ 2 ]

3 голосов
/ 22 января 2011

В итоге я установил это свойство:

$this->Alert->recursive = 2;

В функции index () контроллера предупреждений.

Тогда мне не пришлось делать отдельный поиск, и я смог сослаться на поле имени в таблице Tasks в index.ctp следующим образом:

<td><?php echo $alert['Schedule']['Task']['name']; ?>&nbsp;</td>
1 голос
/ 22 января 2011

Попробуйте это.

в alert.php

CLass Alert extends AppModel{
    var $name = 'Alert';
    var $belongsTo = array( 
         'Schedule' => array( 
             'className' => 'Schedule', 
             'foreignKey' => 'schedule_id' 
         )
    ); 
}

в schedule.php

 CLass Schedule extends AppModel{
        var $name = 'Schedule';
        var $belongsTo = array( 
             'Task' => array( 
                'className' => 'Task', 
                'foreignKey' => 'task_id' 
            )
        ); 
    }

затем find с recursive=>2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...