Laravel Eloquent:模型删除时的连带删除
删除一条数据库记录的时候希望能自动删除这条记录关联的其它数据,如删除用户后连带删除其创建的文章和图片。
可以用 Eloquent
的 deleting
事件来实现:
class User extends Eloquent
{
public function photos()
{
return $this->hasMany('Photo');
}
public function posts()
{
return $this->hasMany('Post');
}
protected static function boot()
{
parent::boot();
static::deleting(function($user) {
$user->photos()->delete();
$user->posts()->delete();
});
}
}
MySQL 数据库 Cascade#
同样也可以通过 MySQL 数据库的 Cascade 级联删除来实现。迁移文件示例:
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateTopicsTable extends Migration
{
public function up()
{
Schema::create('topics', function(Blueprint $table) {
$table->increments('id');
$table->string('title')->index();
$table->text('body');
$table->bigInteger('user_id')->unsigned()->index();
$table->timestamps();
// 当 user_id 对应的 users 表数据被删除时,删除词条
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
}
public function down()
{
Schema::drop('topics');
}
}
当对应的 User 被删除时,该用户的所有 Topic 会连带删除。
推荐文章: