zn12
@zn12 (a j)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

動的に追加されたフォーム入力欄から値を取得して、データベースに登録したい。

解決したいこと

Laravel6でレシピ投稿アプリを作っています。
食材と分量を入力できるフォーム欄がそれぞれあり、JavaScriptで+ボタンを押せばフォーム入力欄を追加できるようにしています。
追加されたフォーム欄に入力された値もすべて同時にMySQLに登録したいです。

発生している問題

食材、分量のフォーム入力欄のname属性を配列として受け取れるようにしましたが、
一つのforeach文で、それぞれの入力欄を分けて取得する方法が全くわかりません。

bladeファイル

create.blade.php
//食材
<input type="text" class="form-control" name="foodstuff[][food]">

//分量
<input type="text" class="form-control" name="foodstuff[][amount]">

controllerファイル(つまづいている部分)

CreateController.php
 $ingredients = $request->input('foodstuff');

 foreach ($ingredients as $value) {
     $foodstuff = new Foodstuff();
     $foodstuff->food =   //ここにforeachで回している値(name属性のfood部分)を入れたいです。
     $foodstuff->amount = //amount部分も同様です。
     $foodstuff->save();
}

挿入したいテーブル

foodstuffsテーブル

カラム名
id
food
amount

よろしくお願いいたします。

0

1Answer

食材と分量の入力フォームが必ずセットになるのであれば、下記のようにして

//食材
<input type="text" class="form-control" name="foodstuff[food][]">
//分量
<input type="text" class="form-control" name="foodstuff[amount][]">

食材でも分量でもどちらでもいいので配列をループで回し、キーを取得します。
キーからそれぞれの配列の食材・分量の値を取得して保存すれば良いと思います。

 $ingredients = $request->input('foodstuff');
 
 foreach ($ingredients['food'] as $key => $value) {
     $foodstuff = new Foodstuff();
     $foodstuff->food = $ingredients['food'][$key];
     $foodstuff->amount = $ingredients['amount'][$key];
     $foodstuff->save();
}
1Like

Comments

  1. @zn12

    Questioner

    keyの値を連番にするところが盲点でした。

    無事、入力された値をセットでデータベースに登録することが出来ました。

    丁寧なご回答いただきありがとうございます。

Your answer might help someone💌