🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

1205閲覧

LaravelでのBulkInsertについて

Yachin

総合スコア21

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/03/15 12:28

Laravelで簡易的なレストラン予約システムを作成しています。お店側が電話などで予約を取り、その情報の登録・更新処理をイメージしていただければと思います。ここで、配列に格納した情報をループで見ながらupdateOrCreateメソッドで処理を組んでいるのですが、更新処理は可能ですが登録処理では値が入りません。原因がわからないのでアドバイスいただけると光栄です。

PHP/Laravel

1### AdminController.phpの一部 ### 2 3 public function updateOrCreate(Request $request) 4 { 5 // 予約日 6 $date = session('date'); 7 // テーブル数 8 $tbl_cnt = Table::count(); 9 10 11 // 予約テーブル配列化 12 $up_rsvs = array( 13 'tbl_id' => $request->input('tbl_id'), 14 'time' => $request->input('time'), 15 'ppl' => $request->input('ppl'), 16 'r_name' => $request->input('r_name'), 17 'course_id' => $request->input('course_id'), 18 'tel' => $request->input('tel'), 19 'mail' => $request->input('mail'), 20 'memo' => $request->input('memo') 21 ); 22 for ($i=0; $i<$tbl_cnt; $i++) { 23 // テーブルIDが入力情報と合致するときは更新、登録 24 if (Reservation::where('tbl_id', $up_rsvs['tbl_id'][$i])->exists()) { 25 Reservation::updateOrCreate( 26 ['tbl_id' => $up_rsvs['tbl_id'][$i]], 27 [ 28 'time' => $up_rsvs['time'][$i], 29 'ppl' => $up_rsvs['ppl'][$i], 30 'name' => $up_rsvs['r_name'][$i], 31 'course_id' =>$up_rsvs['course_id'][$i], 32 'tel' => $up_rsvs['tel'][$i], 33 'mail' => $up_rsvs['mail'][$i], 34 'memo' => $up_rsvs['memo'][$i] 35 ] 36 ); 37 // } 38 } 39 } 40 // 予約日の曜日 41 $datetime = new DateTime($date); 42 $week = array("日", "月", "火", "水", "木", "金", "土"); 43 $w = (int)$datetime->format('w'); 44 $day_of_week = $week[$w]; 45 46 47 // 予約情報 48 $rsvs = Reservation::where('date', $date) 49 ->get(['tbl_id', 'date', 'time', 'ppl', 'reservations.name as r_name', 'course_id', 'tel', 'mail', 'memo']); 50 return view('admin/edit', compact('date', 'day_of_week', 'rsvs', 'tbl_cnt')); 51 } 52}

PHP/Laravel

1### edit.blade.phpの一部 ### 2 3<div class="container m-5 p-5"> 4 <h4 class="text-center mt-3">管理画面</h4> 5 <br><br> 6 <p class="text-right">{{ date('Y年n月j日', strtotime($date)).$day_of_week }}曜日</p> 7 <form method="get" action="{{ route('a.uc') }}"> 8 <div class="table-responsive"> 9 <table class="table table-bordered bg-white border-secondary"> 10 <thead class="text-center"> 11 <th class="border" height="40" width="60">座席</th> 12 <th width="90">予約時間</th> 13 <th width="60">人数</th> 14 <th width="140">名前</th> 15 <th width="160">コース</th> 16 <th width="140">電話番号</th> 17 <th width="160">メールアドレス</th> 18 <th width="400">メモ</th> 19 </thead> 20 <tbody class="text-left edit"> 21 @for($i=0; $i<$tbl_cnt; $i++) <tr> 22 <td height="40"><input name="tbl_id[]" type="text" value="{{ $i+1 }}" 23 style="border:none;"> 24 </td> 25 <td><input name="time[]" type="text" @if(!empty($rsvs[$i]['time'])) 26 value="{{ $rsvs[$i]['time'] }}" style="border:none;"> 27 @endif 28 </td> 29 <td><input name="ppl[]" type="text" @if(!empty($rsvs[$i]['ppl'])) 30 value="{{ $rsvs[$i]['ppl'] }}" style="border:none;"> 31 @endif</td> 32 <td><input name="r_name[]" type="text" @if(!empty($rsvs[$i]['r_name'])) 33 value="{{ $rsvs[$i]['r_name'] }}" style="border:none;"> 34 @endif</td> 35 <td><select name="course_id[]" class="course_select"> 36 <option></option> 37 <option value="1" @if(isset($rsvs[$i]['course_id']) && 38 $rsvs[$i]['course_id']==1 ) selected @endif> 39 焼鳥三昧コース</option> 40 <option value="2" @if(isset($rsvs[$i]['course_id']) && 41 $rsvs[$i]['course_id']==2 ) selected @endif> 42 串カツフルコース</option> 43 <option value="3" @if(isset($rsvs[$i]['course_id']) && 44 $rsvs[$i]['course_id']==3 ) selected @endif> 45 お刺身舟盛コース</option> 46 </select> 47 </td> 48 49 <td><input name="tel[]" type="text" @if(!empty($rsvs[$i]['tel'])) 50 value="{{ $rsvs[$i]['tel'] }}" style="border:none;"> 51 @endif</td> 52 <td><input name="mail[]" type="text" @if(!empty($rsvs[$i]['mail'])) 53 value="{{ $rsvs[$i]['mail'] }}" style="border:none;"> 54 @endif</td> 55 <td><input name="memo[]" type="text" @if(!empty($rsvs[$i]['memo'])) 56 value="{{ $rsvs[$i]['memo'] }}" style="border:none;"> 57 @endif</td> 58 </tr> 59 @endfor 60 </tbody> 61 </table> 62 </div> 63 <button type="submit" class="btn btn-primary btn-block btn-lg" 64 onclick="return confirm('予約情報を更新します。よろしいですか?');"> 65 {{ __('変更完了') }} 66 </button> 67 </form> 68 <br> 69 <form method="get" action="{{ route('a.cal') }}"> 70 <button type="submit" class="btn btn-secondary btn-block btn-lg"> 71 カレンダー画面に戻る 72 </button> 73 </form> 74</div>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

if (Reservation::where('tbl_id', $up_rsvs['tbl_id'][$i])->exists()) {
の行で、今から挿入するデータには'tbl_id'は存在しないので、if文の中の処理は実行されていませんでした。

PHP/Laravel

1AdminController.php改 2 3public function updateOrCreate(Request $request) 4 { 5 // 予約日 6 $date = session('date'); 7 // テーブル数 8 $tbl_cnt = Table::count(); 9 10 11 // 予約テーブル配列化 12 $up_rsvs = array( 13 'tbl_id' => $request->input('tbl_id'), 14 'time' => $request->input('time'), 15 'ppl' => $request->input('ppl'), 16 'r_name' => $request->input('r_name'), 17 'course_id' => $request->input('course_id'), 18 'tel' => $request->input('tel'), 19 'mail' => $request->input('mail'), 20 'memo' => $request->input('memo') 21 ); 22 for ($i=0; $i<$tbl_cnt; $i++) { 23 // テーブルIDが入力情報と合致するときは更新、登録 24 if (Reservation::where('tbl_id', $up_rsvs['tbl_id'][$i])->exists()) { 25 // Reservation::updateOrCreate( 26 // ['tbl_id' => $up_rsvs['tbl_id'][$i]], 27 Reservation::where('tbl_id', $up_rsvs['tbl_id'][$i]) 28 ->update( 29 [ 30 'time' => $up_rsvs['time'][$i], 31 'ppl' => $up_rsvs['ppl'][$i], 32 'name' => $up_rsvs['r_name'][$i], 33 'course_id' =>$up_rsvs['course_id'][$i], 34 'tel' => $up_rsvs['tel'][$i], 35 'mail' => $up_rsvs['mail'][$i], 36 'memo' => $up_rsvs['memo'][$i] 37 ] 38 ); 39 } else { 40 if (!empty($up_rsvs['time'][$i]) 41 || !empty($up_rsvs['ppl'][$i]) 42 || !empty($up_rsvs['r_name'][$i]) 43 || !empty($up_rsvs['course_id'][$i]) 44 || !empty($up_rsvs['tel'][$i]) 45 || !empty($up_rsvs['mail'][$i]) 46 || !empty($up_rsvs['memo'][$i]) 47 ) { 48 Reservation::create([ 49 'tbl_id' => $up_rsvs['tbl_id'][$i], 50 'date' => $date, 51 'time' => $up_rsvs['time'][$i], 52 'ppl' => $up_rsvs['ppl'][$i], 53 'name' => $up_rsvs['r_name'][$i], 54 'course_id' => $up_rsvs['course_id'][$i], 55 'tel' => $up_rsvs['tel'][$i], 56 'mail' => $up_rsvs['mail'][$i], 57 'memo' => $up_rsvs['memo'][$i], 58 ]); 59 } 60 } 61 } 62 // 予約日の曜日 63 $datetime = new DateTime($date); 64 $week = array("日", "月", "火", "水", "木", "金", "土"); 65 $w = (int)$datetime->format('w'); 66 $day_of_week = $week[$w]; 67 68 69 // 予約情報 70 $rsvs = Reservation::where('date', $date) 71 ->get(['tbl_id', 'date', 'time', 'ppl', 'reservations.name as r_name', 'course_id', 'tel', 'mail', 'memo']); 72 return view('admin/edit', compact('date', 'day_of_week', 'rsvs', 'tbl_cnt')); 73 } 74}

投稿2021/03/15 13:45

Yachin

総合スコア21

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問