WST87448735
@WST87448735

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

[Laravel]1回のsubmitで複数のデータ登録

解決したいこと

laravel6においてレシピ投稿アプリを作っております。
1つのレシピに複数の材料を1回のsubmitで登録したいのですが、詰まっています。

発生している問題

+ボタンを押したら入力フォームを増やせるように実装しています。
最後の1つだけが材料テーブルのMaterialsに登録されます。
おそらく配列にしたりするのかなと思ってますが思いつかずです💦

該当するソースコード

●データ送信箇所

creare.php

<div class="form-group"
    >
        <label>材料
            <input class="form-control" type="hidden" name="recipe_id" value="">
            <div class="materials">
            <input class="form-control" type="name" name="material_name" placeholder="材料名">
            <input class="form-control" type="text" name="amount" placeholder="分量">
            <select class="form-control" name="unit">
                @foreach($units as $unit)
                 <option value="{{ $unit->name }}">{{ $unit->name }}</option>
                @endforeach
            </select>    
            <input type="button" value="+" class="add pluralBtn">
            <input type="button" value="-" class="del pluralBtn">
           
            </div>
        </label>
    </div>

●コントローラーでの登録箇所

Recipecontroller.php

 public function store(RecipeRequest $request)
    {
        $user = \Auth::user();
        
        $path = $this->saveImage($request->file('image'));
        
        $recipe = Recipe::create(
            [
                'user_id' => auth()->id(),
                'name' => $request->name,
                'category_id' => $request->category_id,
                'image' => $path,
                'process' => $request->process,
            ]);
         $recipe->materials()->createMany([
           [
              'name' => $request->material_name,
              'recipe_id' => $recipe->id,
              'amount' => $request->amount,
              'unit' => $request->unit,
            ],
            
            
        ]);


0

1Answer

name属性が重複しているので、最後の要素が有効になっているのだと思います。
なので「material_1_name」のように個別の名前を付ける必要があります。

もしくは、name属性の値に[ ]を使うことで、データを配列で受け取ることもできます。

<input name="products[][name]" value="hoge">
<input name="products[][name]" value="fuga">
// 配列入力を含むフォームを操作する場合は、「ドット」表記を使用して配列にアクセスします。
$name = $request->input('products.0.name');

$names = $request->input('products.*.name');

1Like

Comments

  1. @WST87448735

    Questioner

    ご回答ありがとうございます!
    この場合、nameとamountとunitそれぞれを配列にしてそれぞれをforeachで回すのでしょうか?
  2. はい、そのようなイメージです。

Your answer might help someone💌