🐥
Laravel 一対多で入れた画像ファイルを一緒に消す
Laravel(5.8)で、一つの記事に対し複数の画像がアップしたい。
こちらを参考に記事の登録まで出来ました。
※以降のソースは上記記事を参考にしていますが、photos()の部分をimages()に読み替えてください
記事の削除機能もつけたい(物理削除)のですが単純に記事のidのみでdeleteしようとしても失敗します。
親記事を削除する前に子を削除
public function destroy($id)
{
$item = Item::find($id);
$item->images()->delete();
$item->delete();
\Session::flash('flash_message', '記事を削除しました。');
return redirect('admin/item');
}
itemが親でimagesが子になります。先に子であるimagesを削除することでエラーなく親も子も消すことが出来ました。
画像も消したい
単純な親子関係ならこれで解決ですが、今回はdb部分だけでなく、画像もアップしているのでそれも消さなければなりません。
public function destroy($id)
{
$item = Item::find($id);
foreach ($item['images'] as $image) {
//$image['path']に画像パス情報
\Storage::delete($image['path']);
}
$item->images()->delete();
$item->delete();
\Session::flash('flash_message', '記事を削除しました。');
return redirect('admin/item');
}
deleteする前にforeachでパスを調べ、Storage::deleteすることで関連する全ての画像を削除できます
Discussion