从不同模型中检索数据

时间:2011-10-14 04:27:39

标签: cakephp model

我一直在尝试在同一页面中显示来自不同模型的数据,但仍无法使其正常工作。 这是模型之间的关系

客户有很多工作

作业属于客户

Job hasMany Jobtask

Jobtask belongsTo Job

Jobtask有很多Jobtasksvehicle

Jobtasksvehicle属于Jobtask and Vehicle

车辆有多个Jobtasksvehicle

这是我的工作控制器

    function sch($id = null) {
    if (!$id) {
        $this->Session->setFlash(__('Invalid job', true));
        $this->redirect(array('action' => 'index'));
    }
    $job = $this->Job->find('first', array(
'conditions' => array('Job.id' => $id),
'contain' => array('Customer',
    'Jobtask' => array(
        'Jobtasksvehicle' => array(
            'Vehicle'
         ),
     ),
),

));

我要做的是显示来自客户,工作,工作任务,Jobtasksvehicle,车辆模型的数据。 我可以从Customer,Job和Jobtask获取数据,但不能从Jobtasksvehicle和Vehicle模型中获取数据。我想显示分配给每个工作任务的每辆车(车辆模型)。

这是我想在同一个表中显示jobtask和Vehicle模型的地方。

    <?php
    $i = 0;
    foreach ($job['Jobtask'] as $jobtask):
        $class = null;
        if ($i++ % 2 == 0) {
            $class = ' class="altrow"';
        }
    ?>
    <tr<?php echo $class;?>>
        <td><?php echo $jobtask['id'];?></td>
        <td><?php echo $jobtask['job_id'];?></td>
        <td><?php echo $jobtask['rate_id'];?></td>
        <td><?php echo $jobtask['type'];?></td>
        <td><?php echo $jobtask['date'];?></td>
        <td><?php echo $jobtask['starttime'];?></td>
        <td><?php echo $jobtask['timeband'];?></td>
        <td><?php echo $jobtask['settlement'];?></td>       
        <td><?php echo $job['Vehicle']['vehiclemodel'];?></td>
    </tr>
<?php endforeach; ?>
</table>

&GT;

1 个答案:

答案 0 :(得分:0)

一切似乎都很好,你需要将find放在recursive = 3中,就像这样

  $job = $this->Job->find('first', array(
      'conditions' => array('Job.id' => $id),
      'recursive' => 3,
      'contain' => array('Customer',
            'Jobtask' => array(
               'Jobtasksvehicle' => array(
               'Vehicle'
                ),
            ),
       ),
   ));

但仍然可以包含的行为应该自动计算递归,确保你正在加载可包容的行为。

查看有关containable behaviour

的书

同时检查是否正在执行sql查询,如果出现sql查询,则可能需要指定字段(您可能需要使用Job。* o Vehicle。*来获取所有字段...)