首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CakePHP -在列出的记录中显示另一个列表记录

CakePHP -在列出的记录中显示另一个列表记录
EN

Stack Overflow用户
提问于 2012-11-25 21:39:49
回答 1查看 858关注 0票数 0

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

我有3个表,包括:(职员,课程,出勤)

(员工)

代码语言:javascript
复制
staff_id    |   name    |   passport
------------------------------------------------
1       |   A   |   123
2       |   B   |   132
3       |   C   |   321

(课程)

代码语言:javascript
复制
c_id    |   name
----------------------
10  |   PHP
20  |   AJAX
30  |   XHTML

(出席率)

代码语言:javascript
复制
at_id   |   staff_id    |   course_id
------------------------------------------------
1   |   1       |   10
2   |   1       |   20
3   |   1       |   30
4   |   2       |   20
5   |   2       |   30

我想生成一些报告,以显示我们工作人员当然参加的列表,如下所示:

代码语言:javascript
复制
Name    |   Course Attend
------------------------------
A   |   PHP
    |   AJAX
    |   XHTML
B   |   AJAX
    |   XHTML

在这里,我使用表staff来显示结果,我应该怎么做才能在我的列Course Attend中获得另一个与考勤表相关的获取结果,该列将列出与其人员in相关的所有结果。

我的代码:

(ReportController.php)

代码语言:javascript
复制
$view = $this->Staff->find('all');

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

(视图- report.ctp)

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

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-26 05:26:41

您的问题不是很清楚,但在我看来,您似乎希望显示一个包含所有3个表的信息的视图。

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

出勤模型中:

代码语言:javascript
复制
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 ')查询,该查询将检索出勤中的所有行,以及它们对应的职员和课程行。

代码语言:javascript
复制
$attendance_rows = $this->Attendance->find('all', array('order' => 'Staff.name ASC, Staff.staff_id ASC'));
$this->set("attendance_rows", $attendance_rows);

视图中,您可以照常使用foreach循环:

代码语言:javascript
复制
<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')查询是有序的,则此方法有效。

代码语言:javascript
复制
<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’字段了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13551542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档