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] 配列エラー array to string conversion

解決したいこと

Laravel6にてレシピアプリを開発中です。

1つのレシピに対して複数の材料(材料名、数量、単位)を登録しようとしたところエラーを吐きました。

配列の使い方がうまく理解できておらずご教授お願い致します。

発生している問題・エラー

レシピを追加ボタンを押したところで以下のエラーが発生します。

ErrorException
Array to string conversion

該当するソースコード

creare . blade.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="name[][material_name]" placeholder="材料名">
            <input class="form-control" type="text" name="material[][amount]" placeholder="分量">
            <select class="form-control" name="material[][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>
    
    <div class="form-group">
        <label>
            作り方
            <textarea class="form-control process" name="process" cols="100" rows="10"></textarea>
        </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->input('name.0.material_name'),
              'recipe_id' => $recipe->id,
              'amount' => $request->input('material.0.amount'),
              'unit' => $request->input('material.0.unit'),
            ],
            
            
        ]);
0

2Answer

エラーの発生源などが記載されていないので推測なのですが、$request->nameの値が配列なのではないでしょうか?

<input class="form-control" type="name" name="name[][material_name]" placeholder="材料名">
0Like

Comments

  1. @WST87448735

    Questioner

    配列ですが、問題あるのでしょうか?💦
    材料名も複数登録したいのですが( ノД`)
  2. Recipeのnameとしては文字列が期待されていると思います。
    そこへ配列を渡しているので「Array to string conversion」というエラーが出ているのではないか、という推測です。

    実際に配列になっているとすれば、その中のどれがRecipeのnameにあたるものですか?
  3. @WST87448735

    Questioner

    レシピの名前とは別です💦
    1つのレシピに複数の材料の名前と数量と単位があるイメージで配列にしているのは材料の名前のほうですがダメな書き方ですかね?😢
  4. 記載の情報からはエラーが発生している部分が分からないので、気になった部分を推測して回答した次第です。

    問題ないのであれば私の推測が違っていたということですので、原因は別にあるのでしょう。

まずは{{}}で出力している変数なりなんなりをdd()でデバッグしてみてください。
{{}}はプログラムの出力結果を表示するために使用します。
つまり、どれかしらの変数やプロパティ?が配列のまま{{}}で出力しようとしているからエラーになるんじゃないかと思います。
コントローラも同様に期待の値を操作しているかデバッグしてみてください。
まずはデバッグ!

0Like

Comments

  1. @WST87448735

    Questioner

    QLSTATE[23000]: Integrity constraint violation: 1048 Column 'amount' cannot be null

    というエラーに変わりました。
    どうやらそもそもcreateManyを使いべきなのか。。。
  2. @WST87448735

    Questioner

    ちなみにですがまだView側でmaterialは呼び出しておりません!
    DBに登録するformのところで躓いております
  3. cannot be null
    て言ってるんでnot nullのフィールドにnullが渡されてエラーになってますね多分。createManyて使ったことないですが、やりたいことできてるならいいんじゃないですか?
  4. @WST87448735

    Questioner

    入力してるのにnullになるんですよねえ😢
    書き方が悪いのか💦
  5. 入力というか、デバッグして
    $request->input('material.0.amount')
    これの値がnullではないことは確認してますか?
    dd($request->input('material.0.amount'))
    とか
    var_dump($request->input('material.0.amount'))
    とかで
  6. @WST87448735

    Questioner

    nullになってますが何故かが分かりません💦
  7. なるほど、であればrequestからのパラメータの取得の記述が間違っているんでしょうね。
    解決できることを願ってます!

Your answer might help someone💌