前提・実現したいこと
Laravel 5.6 で出欠管理のアプリケーションを作成しています。
チェックボックスでユーザーを選択し、選択されたユーザーの出欠ステータスを変更するフォームを作成したいのですが、更新対象となるユーザーIDが最初のひとりにしか更新適用されません。
・複数回UPDATE(orcreate)を行う処理の方法
補足情報(FW/ツールのバージョンなど)
- PHP7.2
- Laravel5.6
- MySQL5.6
変更するユーザーの選択(View1)
↓
出欠ステータスの選択(View2)
↓
送信(ステータス変更処理)
usersテーブル
id | name | age |
---|---|---|
1 | 一郎 | 30 |
2 | 次郎 | 29 |
3 | 三郎 | 28 |
4 | 四子 | 27 |
5 | 五子 | 26 |
6 | 六子 | 25 |
eventsテーブル
id | name | date |
---|---|---|
1 | テスト会1 | 2018/09/01 |
2 | テスト会2 | 2018/09/10 |
event_userテーブル
|id|user_id|event_id|attendance_status|
|:--|:--:|--:|
|1|1|2|attend|
|2|1|1|absence|
|3|2|1|attend|
|4|2|2|attend|
(※user_eventテーブルのuser_id と event_id は各テーブルのidを外部キーとして作成。)
一括更新する処理
public function bulkStatusUpdate(Request $request, Event $event, User $user) { $bulk_users[] = $request->input('user_id'); $current = Carbon::now(); $i = 0; foreach($bulk_users as $bulk_user) { if($i >= count($bulk_user)){ break; } EventUser::updateOrCreate( ['user_id' => $bulk_user[$i], 'event_id' => $request->input('event_id')], ['attendance_status' => $request->input('attendance_status'), 'update_at' => $current] ); $i++; } return redirect('View1'); }
$bulk_users出力
array(1) { [0]=> array(3) { [0]=> string(1) "1" [1]=> string(1) "4" [2]=> string(1) "6" } }
$bulk_user出力
array(3) { [0]=> string(1) "1" [1]=> string(1) "4" [2]=> string(1) "6" }
実行すると、配列の一番最初のユーザーしか更新されず、エラーメッセージも出ていません。
どこが間違っているのでしょうか。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。