環境
Laravel v9.5.1 (PHP v8.1.3)
Laravel
cascadeOnDelete()
マイグレーションファイルでやる方法。
Schema::table('posts', function (Blueprint $table) {
$table->foreignId('user_id')->constrained()->cascadeOnDelete();
});
deleting()
modelにロジックを書く方法。
app/Models/User.php
protected static function boot()
{
parent::boot();
self::deleting(function ($user) {
$user->posts()->delete();
});
}
Rails
on_delete: :cascade
マイグレーションファイルでやる方法。
add_foreign_key :users, :posts, on_delete: :cascade
dependent: :destroy
modelにロジックを書く方法。
個人的にこれをよく使ってた。
models/user.rb
has_many :posts, dependent: :destroy
models/post.rb
belongs_to :user