How我们可以使用display在列出的记录中inside另一个列表记录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在这里,我使用表staff来显示结果,我应该怎么做才能在我的列Course Attend中获得另一个与考勤表相关的获取结果,该列将列出与其人员in相关的所有结果。
我的代码:
(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>有什么想法吗?
发布于 2012-11-26 05:26:41
您的问题不是很清楚,但在我看来,您似乎希望显示一个包含所有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')
)
);
}在控制器中,您可以添加一个find(' all ')查询,该查询将检索出勤中的所有行,以及它们对应的职员和课程行。
$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>要只显示一次员工的姓名,可以在视图中添加一个变量,并在每次找到新的员工行时重置该变量。如果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知道如何根据它们的名称绑定模型。如果你创建的模型是'the Cakephp way',那么在创建关联时就不需要指定'foreignKey‘或'conditions’字段了。
https://stackoverflow.com/questions/13551542
复制相似问题