Cakephp:模型中的多个属性

时间:2011-01-22 04:14:12

标签: php cakephp

在模型中,是否可以对belongsTo进行多次迭代?

假设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' 
         ));

但是,这只是将Schedules和Tasks直接连接到Alerts(这是生成的sql:

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

2 个答案:

答案 0 :(得分:3)

我最终设置了这个属性:

$this->Alert->recursive = 2;

在警报控制器的index()函数中。

然后我没有必要单独查找并能够在index.ctp的Tasks表中引用name字段,如下所示:

<td><?php echo $alert['Schedule']['Task']['name']; ?>&nbsp;</td>

答案 1 :(得分:1)

试试这个。

在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' 
            )
        ); 
    }

然后findrecursive=>2