0

HowCakePHPを使用して、リストされたレコードに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>

何か案は?

4

1 に答える 1

0

あなたの質問からはあまり明確ではありませんが、3つのテーブルすべてからの情報を含むビューを表示したいと思うようです。

この場合、モデルの関連付けを作成する必要があります。

出席モデルの場合:

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>

スタッフの名前を1回だけ表示するには、ビューに変数を追加して、新しいスタッフ行が見つかるたびにリセットします。これは、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>

もう1つの提案:Cakephpは名前に基づいてモデルをバインドする方法を知っているため、主キーには常に「staff_id」や「c_id」ではなく「id」という名前を付ける必要があります。モデルを「Cakephpの方法」で作成する場合、関連付けを作成するときに「foreignKey」または「conditions」フィールドを指定する必要はありません。

于 2012-11-25T21:26:40.937 に答える