前提・実現したいこと
CakePHP3で出席管理システムを作成しています。
infoは1の場合出席、0の場合遅刻・早退、-2の場合欠席を表す。
subject_idが481052の時だけ選択し、日付を昇順にして1つ目のデータから2つ目のデータのように表示したいです。しかし、下記の試したことに記載している通りでしか表示できません。
2つ目の様に表示するためにどうしたらいいのか教えて頂けたら幸いです。
|id|perdon_id|subject_id|date|info|
|:--|:--:|--:|
|1|2160001|481052|2020-01-22|1
|2|2160001|481053|2020-01-22|1
|3|2160002|481052|2020-01-22|1
|4|2160003|481052|2020-01-22|0
|5|2160003|481053|2020-01-22|1
|6|2160001|481052|2020-01-15|1
|7|2160002|481052|2020-01-15|-2
|8|2160003|481052|2020-01-15|-2
person_id | 2020-01-15のinfo | 2020-01-22のinfo |
---|---|---|
2160001 | 1 | 1 |
2160002 | -2 | 1 |
2160003 | -2 | 0 |
### 発生している問題・エラーメッセージ |
エラーメッセージ
該当のソースコード
php
1//contoroller 2{ 3 $first=$this->Attendances->find() 4 ->where(['Attendances.subject_id' => '481052']) 5 ->order(['Attendances.date' => 'ASC']) 6 ->contain(['Subjects']); 7 $this->set('first', $first); 8 9$second = $first; 10 $this->set('second', $second); 11 12} 13 14//veiw 15 16<table> 17<thead> 18<tr> 19 <th>学籍番号</th><th>2020-01-15のinfo</th><th>2020-01-22のinfo</th> 20</tr> 21</thead> 22 23<tr> 24<?php foreach($first->toArray() as $obj): ?> 25 <td><?=h($obj->person_id) ?></td> 26 27<?php foreach($second->toArray() as $sobj): ?> 28<?php if($sobj->person_id==$obj->person_id): ?> 29 <td><?=h($sobj->info) ?></td> 30<?php endif; ?> 31 32<?php endforeach; ?> 33 34 35</tr> 36<?php endforeach; ?> 37 38 39</table>
試したこと
上のソースコードで試したのですが以下のようになってしまいます。
上で示した2つ目の様に表示したいのですが無駄に同じ番号の情報が表示されてしまいます。
person_id | 2020-01-15のinfo | 2020-01-22のinfo |
---|---|---|
2160001 | 1 | 1 |
2160002 | -2 | 1 |
2160003 | -2 | 0 |
2160001 | 1 | 1 |
2160002 | -2 | 1 |
2160003 | -2 | 0 |
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/11 13:39
2020/02/12 06:01 編集
2020/02/17 05:08