在Laravel(Eloquent ORM)中自动删除相关行
在Laravel(Eloquent ORM)中自动删除相关行
当我使用这种语法删除一行时:
$user->delete();
是否有一种方法可以附加类似的回调,以便它自动执行以下操作:
$this->photo()->delete();
最好在模型类内部完成。
admin 更改状态以发布 2023年5月24日
你实际上可以在迁移中设置这个:
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
来源:http://laravel.com/docs/5.1/migrations#foreign-key-constraints
你也可以指定约束的 "on delete" 和 "on update" 属性的期望操作:
$table->foreign('user_id') ->references('id')->on('users') ->onDelete('cascade');
我相信这是使用Eloquent事件的一个完美案例(http://laravel.com/docs/eloquent#model-events)。您可以使用“deleting”事件进行清理:
class User extends Eloquent { public function photos() { return $this->has_many('Photo'); } // this is a recommended way to declare event handlers public static function boot() { parent::boot(); static::deleting(function($user) { // before delete() method call this $user->photos()->delete(); // do the rest of the cleanup... }); } }
您可能还应将整个过程放入事务中,以确保引用完整性。