How
我们可以使用CakePHP display
列出记录中的另一个列表记录inside
吗?
我有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
我想生成一些报告,显示我们的员工参加的课程,如下所示:
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 :(得分: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的名称,您可以在视图中添加变量,并在每次找到新的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>
还有一个建议:您应该始终将主键命名为“id”,而不是“staff_id”或“c_id”,因为Cakephp知道如何根据名称绑定模型。如果您创建模型'Cakephp方式',则在创建关联时不需要指定'foreignKey'或'conditions'字段。