2011-10-14 55 views
0

我一直试图在同一页面显示来自不同模型的数据,但仍然无法使其工作。 这是关系中间人模型从不同型号中检索数据

客户的hasMany工作

工作属于关联客户

工作的hasMany Jobtask

Jobtask属于关联工作

Jobtask的hasMany Jobtasksvehicle

Jobtasksvehicle属于关联Jobtask和车辆

车辆的hasMany 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' 
     ), 
    ), 
), 

));

我要做的是显示来自Customer,Job,Jobtask,Jobtasksvehicle,Vehicle models的数据。 我可以从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> 

?>

+0

查找功能似乎是正确的。你有没有尝试调试$ job变量?您查看的记录是否可能没有Jobtasksvehicle和Vehicle关联的记录? –

回答

0

一切似乎都很正常,你需要把查找递归= 3,这样

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

,但仍是中容纳的行为应该算递归自动,确保你正在加载可容纳的bahaviour。

检查书拿出约containable behaviour

而且检查SQL查询正在做,如果SQL查询显示您可能需要指定的字段(您可能需要使用工作。*Ø车辆。*到获取所有字段...)