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 編集時に画像データを空で送信しても保持する方法

解決したいこと

編集機能を一つのメソッドですべて行えるようにしたく実装中です。

該当するソースコード

Recipecontroller
public function update(RecipeRequest $request, $id)
    {
        $recipe = Recipe::find($id);
        $user = \Auth::user();
        $path = $this->saveImage($request->file('image'));
        if($recipe->image !== ''){
            \Storage::disk('public')->delete('recipe/'.$recipe->image);
        }
        
        $recipe->update($request->only([
            'name','category_id',   
        ]));
        $recipe->update([
           'image' => $path, 
        ]);
        
        session()->flash('success','レシピを編集しました');
        return redirect()->route('recipes.index');
    }
edit.blade.php
<label>
    画像:
    @if($recipe->image !== '')
    <div class="image" style="background-image:url({{ \Storage::url($recipe->image) }})"></div>
    @else
    <div class="image" style="background-image:url({{ asset('images/no_image.png') }})"></div>
    @endif
    <input type="file" name="image">
</label>
</div>

<div>
    <input class="button" type="submit" value="更新">
</div>

自分で試したこと

編集時に画像は選択せずに更新ボタンを押すと

if($recipe->image !== ''){
            \Storage::disk('public')->delete('recipe/'.$recipe->image);
        }

この部分でno_imageデータに変わってしまいます。

画像は更新せず、かつ元のデータも保持するにはどうすればよいでしょうか?

よろしくお願いします。

0

1Answer

普通に空で update しているからかと思います

// 画像が選択されていないため、空が取得される
$path = $this->saveImage($request->file('image'));

//中略

// 空の $path で update
$recipe->update([
   'image' => $path, 
]);

if 文でもあればいいのではないでしょうか


if ($path) {
    $recipe->update([
       'image' => $path, 
    ]);
}
1Like

Comments

  1. @WST87448735

    Questioner

    ありがとうございます!
    解決致しました!

Your answer might help someone💌