質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Laravel

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

7993閲覧

laravelでforeachで回した値をDBに保存したい

machiren

総合スコア17

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Laravel

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/06/24 04:06

編集2019/06/25 06:38

前提・実現したいこと

初めてteratailを利用させてもらいます。プログラミング初心者です。
現場に入るまでの期間で作成をお願いされていますが、ほぼ未経験であり
周りに現在エンジニアがおらず質問できる場がないため利用させていただきます。

現在laravelで社内勤怠システムの作成をしています。
そこでforeachで回したinput要素を送信してDBに登録
したいと思っております。色々試しましたがエラー吐いてしまうので
どなたか知恵をお貸しくださるととても助かります。ちゃんと質問の意図を
伝えられてるかわかりませんがよろしくお願い致します><

発生している問題・エラーメッセージ

Argument 1 passed to Illuminate\Database\Grammar::parameterize() must be of the type array, null given, called in /Users/projects/management/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php on line 869

該当のソースコード

html

1<form action="{{ url('/create/store')}}" method="POST"> 2 3 <table class="management"> 4 5 <tr> 6 <th class='none'></th> 7 <th colspan="6" style="text-align:center">平日</th> 8 <th colspan="2" style="text-align:center">休日</th> 9 <th colspan="6" style="text-align:center">チェックボックス</th> 10 </tr> 11 <tr> 12 <th>日付</th> 13 <!-- <th>曜日</th> --> 14 <th>始業時刻</th> 15 <th>終業時刻</th> 16 <th>休憩時間</th> 17 <th>実働時間</th> 18 <th>うち8h越え</th> 19 <th>うち深夜</th> 20 <th>休日</th> 21 <th>休日深夜</th> 22 <th>休暇</th> 23 <th>欠勤</th> 24 <th>遅刻</th> 25 <th>早退</th> 26 <th>休出</th> 27 <th>振休</th> 28 </tr> 29 30 @csrf 31 @foreach($day as $days) 32 <tr> 33 <td>{{$days->day}}</td> 34 <td><input type="time" step="900" name="opening_time[]"></td> 35 <td><input type="time" step="900" name="ending_time[]"></td> 36 <td><input type="time" step="900" name="break_time[]"></td> 37 <td><input type="time" step="900" name="total_time[]"></td> 38 <td><input type="time" step="900" name="over_time[]"></td> 39 <td><input type="time" step="900" name="night_time[]"></td> 40 <td><input type="time" step="900" name="holiday_time[]"></td> 41 <td><input type="time" step="900" name="holiday_night[]"></td> 42 <td><input type="checkbox" name="holiday[]" value="1"></td> 43 <td><input type="checkbox" name="adsence[]" value="1"></td> 44 <td><input type="checkbox" name="late[]" value="1"></td> 45 <td><input type="checkbox" name="leave_early[]" value="1"></td> 46 <td><input type="checkbox" name="holiday_work[]" value="1"></td> 47 <td><input type="checkbox" name="makeup_holiday[]" value="1"></td> 48 </tr> 49 @endforeach 50 51 </table> 52 53 <input type="text" name="project"> 54 <textarea name="memo"></textarea> 55 56 <td><input type="submit" value="送信"></td> 57 <td><input type="reset" value="リセット"></td> 58 59 </form>

該当のソースコード

php

1public function store(Request $request){ 2 3 $management = Management::create([ 4 5 'opening_time' => $request->input('opening_time'), 6 'ending_time' => $request->input('ending_time'), 7 'break_time' => $request->input('break_time'), 8 'total_time' => $request->input('total_time'), 9 'over_time' => $request->input('over_time'), 10 'night_time' => $request->input('night_time'), 11 'holiday_time' => $request->input('holiday_time'), 12 'holiday_night' => $request->input('holiday_night'), 13 'holiday' => $request->input('holiday'), 14 'adsence' => $request->input('adsence'), 15 'late' => $request->input('late'), 16 'leave_early' => $request->input('leave_early'), 17 'holiday_work' => $request->input('holiday_work'), 18 'makeup_holiday' => $request->input('makeup_holiday')]); 19 20 return redirect('/'); 21 }

###試したコード

php

1public function store(Request $request){ 2 3 foreach($request as $value){ 4 5 Management::create([ 6 7 'opening_time' => $value->name, 8 'ending_time' => $value->name, 9 'break_time' => $value->name, 10 'total_time' => $value->name, 11 'over_time' => $value->name, 12 'night_time' => $value->name, 13 'holiday_time' => $value->name, 14 'holiday_night' => $value->name, 15 'holiday' => $value->name, 16 'adsence' => $value->name, 17 'late' => $value->name, 18 'leave_early' => $value->name, 19 'holiday_work' => $value->name, 20 'makeup_holiday' => $value->name]); 21 22 } 23 return redirect('/'); 24 } 25 26こちらも' 27未定義のプロパティ:Symfony \ Component \ HttpFoundation \ ParameterBag :: $ nameとエラーでした。

補足情報

php 7.1.23 ,laravel 5.8.19

質問の意図がわからないや、もう少し詳しい情報が欲しいなどありましたら遠慮なくおっしゃってくれると助かります。
###解決しました
初学者なため綺麗とは言えないかもしれませんが...

php

1public function store(Request $request){ 2 3 foreach($request->input( 4 'opening_time','ending_time', 5 'break_time','total_time','over_time', 6 'night_time','holiday_time','holiday_night', 7 'holiday','adsence','late','leave_early', 8 'holiday_work','makeup_holiday') as $key => $value){ 9 10 Management::create([ 11 12 'opening_time' => $request->input('opening_time')[$key], 13 'ending_time' => $request->input('ending_time')[$key], 14 'break_time' => $request->input('break_time')[$key], 15 'total_time' => $request->input('total_time')[$key], 16 'over_time' => $request->input('over_time')[$key], 17 'night_time' => $request->input('night_time')[$key], 18 'holiday_time' => $request->input('holiday_time')[$key], 19 'holiday_night' => $request->input('holiday_night')[$key], 20 'holiday' => $request->input('holiday')[$key], 21 'adsence' => $request->input('adsence')[$key], 22 'late' => $request->input('late')[$key], 23 'leave_early' => $request->input('leave_early')[$key], 24 'holiday_work' => $request->input('holiday_work')[$key], 25 'makeup_holiday' => $request->input('makeup_holiday')[$key]]);} 26 27 return redirect('/'); 28 }

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

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

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

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

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

m.ts10806

2019/06/24 04:14

>terateil 細かいですが teratail です
machiren

2019/06/24 04:18

申し訳ありません、修正致します。
guest

回答3

0

must be of the type array, null given

この文言から、配列であるべき値が、NULLになってしまっているというのですから、

php

1 public function store(Request $request){ 2 3 dd($request); // どんな値になっているかを確認 4 5 $management = Management::create([ 6 'opening_time' => $request->input('opening_time'), 7 'ending_time' => $request->input('ending_time'), 8 'break_time' => $request->input('break_time'), 9 'total_time' => $request->input('total_time'), 10 'over_time' => $request->input('over_time'), 11 'night_time' => $request->input('night_time'), 12 'holiday_time' => $request->input('holiday_time'), 13 'holiday_night' => $request->input('holiday_night'), 14 'holiday' => $request->input('holiday'), 15 'adsence' => $request->input('adsence'), 16 'late' => $request->input('late'), 17 'leave_early' => $request->input('leave_early'), 18 'holiday_work' => $request->input('holiday_work'), 19 'makeup_holiday' => $request->input('makeup_holiday') 20 ]); 21 22 return redirect('/'); 23 }

$request がどんな構造になっているのかをチェックして受け取り方を探ってゆくのがデバッグ方法です。

投稿2019/06/24 04:23

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

machiren

2019/06/24 04:26

回答ありがとうございます><まだまだ勉強します。
guest

0

チェックボックスのようにわたるデータと渡らないデータがある処理をnameに「[]」をつけて
処理する場合はデータ番号を振る必要があります
(それをしないとtimeとcheckboxにずれが出てきます)

HTML

1<input type="time" step="900" name="opening_time[0]"> 2<input type="checkbox" name="holiday[0]" value="1"> 3・・・ 4<input type="time" step="900" name="opening_time[1]"> 5<input type="checkbox" name="holiday[1]" value="1"> 6・・・ 7<input type="time" step="900" name="opening_time[2]"> 8<input type="checkbox" name="holiday[2]" value="1">

のようになるように@foreachでキーを任意に渡すような書き方をしてください

投稿2019/06/24 04:24

yambejp

総合スコア114574

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

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

machiren

2019/06/24 04:28

回答ありがとうございます><早速書いてみます!
guest

0

ベストアンサー

いずれにしても[]でinputのnameを定義した以上は配列になりますので、そのまま突っ込んでいては使えないと思います。
view側と同じくdaysの分だけループさせて受け取るか、
下記のようにそれぞれループさせるようにしては如何でしょうか。

php

1foreach($request->input('opening_time') as $value){ 2 3}

投稿2019/06/24 04:18

m.ts10806

総合スコア80765

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

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

machiren

2019/06/24 04:26

回答ありがとうございます><早速試してみます!
machiren

2019/06/24 07:06

度々すみません。質問失礼します。それぞれループさせてcreateメソッドを使用をするとinputの引数である'opening_time'の様な一部のみ値が入り、後はNULLで送信されます。私の理解不足で不具合を解消できていないと思いますが、もう1つの「view側と同じくdaysの分だけループさせて受け取る」というのをもう少し詳しく知りたいです><
m.ts10806

2019/06/24 07:09

viewが$dayをループさせてデータを作成している =$dayの数分だけ要素が作られている =その分だけループさせて取れるのでは(つまり0から連番だけどそれぞれの要素数は$dayとリンクしている) ということですね。
machiren

2019/06/24 07:20

ありがとうございます、もう少しうまく作成してみます。
m.ts10806

2019/06/24 07:22

別途回答にあるように <td><input type="time" step="900" name="opening_time[{{$days->day}}]"></td> のようにして明示的に紐づけたほうが確実にできそうには思います。
machiren

2019/06/24 07:26

そういう方法もあるんですね!知識不足で申し訳ないです。ご教示ありがとうごさいます。
m.ts10806

2019/06/24 07:28

はい。あくまで配列ですから。 $a = []; $a[] = "a"; $a[] = "b"; $a[] = "c"; とするか $a = []; $a["a"] = "a"; $a["b"] = "b"; $a["c"] = "c"; とするかの違いです。
m.ts10806

2019/06/24 07:29

知識の問題というより発想部分の問題になってくるかなと思います。 プログラミング言語の仕様という使えるコマは最初から限られているわけですから、書いたようにしか動かないプログラムを如何に「想定通りに動かしていくか」といったところですね。
machiren

2019/06/24 07:34

発想ですか。まだまだ経験を積んでその部分も鍛えていく必要があるみたいです。 とりあえず手を動かしてトライ&エラーを繰り返してみます。
m.ts10806

2019/06/24 07:37

はい。ひとつのことを実現するのに手法は1つではないので、なるべくたくさんの手法を並べられるようになるとその時々に合ったやり方が選べるようになると思います。 ※あとこれも細かいのですが正確にはtrial & error なのです・・
machiren

2019/06/24 07:42

お恥ずかしい...調べると出てきました。
m.ts10806

2019/06/24 07:47

いえ、間違えて覚えてる人って多いので(結構浸透してしまっているので)仕方がないとは思います。
machiren

2019/06/25 06:29

失礼します。遅くなりましたが無事登録できました! 嬉しくて報告してしまいましたが無視してもらって構いません><
m.ts10806

2019/06/25 06:35 編集

解決されたようで何よりです。 別回答でも質問に追記でも良いので最終的にどのようなコードになったのか残しておいてもらえると 同じ問題を抱えた誰かや、自身のためにもなると思います。
machiren

2019/06/25 06:39

備忘録として残しておくことにしました。回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問