モデルとコントローラーの編集
Model.php
class Artist extends Model
{
//このアーティストが所有するタグ(子1へのリレーション)
public function tags()
{
return $this->hasMany(Tag::class);
}
//このアーティストが所有する作品(子2へのリレーション)
public function works()
{
return $this->hasMany(Work::class);
}
}
Controller.php
public function destroy($id)
{
$artistEdit = Artist::findOrFail($id);
if (\Auth::id() === $artistEdit->user_id) {
//子供1リレーション(タグ)を削除
$artistEdit->tags()->each(function ($tag) {
$tag->delete();
});
//子供2リレーション(作品)を削除
$artistEdit->works()->each(function ($work) {
$work->delete();
});
//アーティスト(親)を削除
$artistEdit->delete();
return redirect('/');
}
else{
return redirect('/');
}
}
解説
each は Illuminate\Database\Eloquent\Collection ではなく、Illuminate\Support\Collection クラスのメソッドです。
多対多の場合は、リレーション先のモデルというよりも、 中間テーブルのモデルの操作 となりますので今回のケースが当てはまらない場合もあるかと思います。