2012-11-25 118 views
0

How我们可以display另一个列表记录inside使用CakePHP列出记录吗?CakePHP - 在列表记录中显示另一个列表记录

我有3个表包括:(工作人员,当然,考勤)

(职员)

staff_id | name | passport 
------------------------------------------------ 
1  | A | 123 
2  | B | 132 
3  | C | 321 

(场)

c_id | name 
---------------------- 
10 | PHP 
20 | AJAX 
30 | XHTML 

(考勤)

at_id | staff_id | course_id 
------------------------------------------------ 
1 | 1  | 10 
2 | 1  | 20 
3 | 1  | 30 
4 | 2  | 20 
5 | 2  | 30 

我想g enerate一些报告显示上市当然是由我们的工作人员参加,你可以看到如下:

Name | Course Attend 
------------------------------ 
A | PHP 
    | AJAX 
    | XHTML 
B | AJAX 
    | XHTML 

我这里用表格的工作人员在展示结果,我应该怎样做才能在我的专栏Course Attend有些另一个获取结果与考勤表相关,其中将所有相关结果列入其工作人员ID。

我的代码:

(ReportController.php)

$view = $this->Staff->find('all'); 

$this->set('view', $view); 

(查看 - report.ctp)

<table> 
<?php foreach($view as $data): ?> 
<td> 
    <?php echo $data['Staff']['name']; ?> 
</td> 
<td> 
    <?php // something to do here... ?> 
</td> 
<?php endforeach ?> 
</table> 

任何想法?

+0

你的'view'变量是什么样的? –

回答

0

从你的问题来看,这不是很清楚,但在我看来,你想显示一个包含所有3个表中信息的视图。

在这种情况下,您将需要创建Model associations

考勤模式:

class Attendance extends AppModel { 
    public $hasOne = array(
     'Staff' => array(
      'className' => 'Staff', 
      'foreignKey' => false, 
      'conditions' => array('Staff.staff_id = Attendance.staff_id') 
     ), 
     'Course' => array(
      'className' => 'Course', 
      'foreignKey' => false, 
      'conditions' => array('Course.c_id = Attendance.course_id') 
     ) 
    ); 
} 

控制器,你可以与他们相应的工作人员增加了查找(“全部”)查询,将检索所有的考勤行,一起课程行。

$attendance_rows = $this->Attendance->find('all', array('order' => 'Staff.name ASC, Staff.staff_id ASC')); 
$this->set("attendance_rows", $attendance_rows); 

视图,您可以使用foreach循环和往常一样:

<table> 
<?php foreach($attendance_rows as $data): ?> 
<td> 
    <?php echo $data['Staff']['name']; ?> 
</td> 
<td> 
    <?php echo $data['Course']['name']; ?> 
</td> 
<?php endforeach ?> 
</table> 

只有一次显示人员的姓名,你可以在视图中添加一个变量,并重置每次发现新的Staff行。如果find('all')查询是有序的,这将起作用。

<table> 
<?php $temp = null; $no = 1;?> 
<?php foreach($attendance_rows as $data): ?> 
<td> 
    <?php if ($temp != $data['Staff']['staff_id']) { echo $no; $no++;} ?> 
</td> 
<td> 
    <?php if ($temp != $data['Staff']['staff_id']) { echo $data['Staff']['name']; $temp = $data['Staff']['staff_id']}; ?> 
</td> 
<td> 
    <?php echo $data['Course']['name']; ?> 
</td> 
<?php endforeach ?> 
</table> 

一个建议:你应该总是命名的主键为“身份证”,而不是“staff_id”或“C_ID”,从CakePHP知道如何根据他们的名字绑定模型。如果您创建了模型'Cakephp方式',则创建关联时不需要指定'foreignKey'或'conditions'字段。

+0

我只是使用下面的代码:public'$ belongsTo = array('Staff','Course');'出席模式......需要试试..我会很快发布一个结果..感谢很多@alex。 ac –

+0

只是尝试它,在模型中很不错的实现..但我们怎么能够生成一些数字,因为连续的一些相同的数据也是计数器 –

+0

你是什么意思生成一些数字?你想让工作人员,课程和出勤有独特的ID吗? –

相关问题