2012-11-25 164 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嗎? –

相關問題