LaravelでonDelete('cascade')を書けば勝手にリレーション先の子供が削除されるわけではない


今回発見があったので備忘録。
usersテーブルに紐づくpostsテーブルがあったとして、マイグレーションファイルには

$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');

こう書けば、勝手に削除されると思ってました。。。
この場合で削除されるのは、親(User)を物理削除した場合のみ。
論理削除だと、削除されないようなのです。

自動で削除してくれるのは、物理削除によって親が完全にDB上から消えた場合であって
論理削除のようにまだデータが残っている場合、DBは親が削除されたとはみなさないようです。

参考