1

我有三个模型:User has-many Post has-many Comment。当我删除用户时,我希望自动删除他的所有相关帖子以及与这些帖子相关的评论。为了实现这一点,我在UserPost模型中有以下代码:

// User
protected static function boot() {
    parent::boot();

    static::deleting(function($user) {
        $user->posts()->delete();
    });
}

// Post
protected static function boot() {
    parent::boot();

    static::deleting(function($post) {
        $post->comments()->delete();
    });
}

当我删除一个用户时,他的所有帖子都会被删除,但是,评论会被保留。为什么会这样?

4

2 回答 2

1

你有没有尝试过下一步?

// User
protected static function boot() {
    parent::boot();

    static::deleting(function($user) {
        foreach ($user->posts() as $post)
        {
            $post->comments()->delete();
        }            
        $user->posts()->delete();

    });

顺便说一句,这应该在删除级联的数据库模式中,并且您不需要任何模型代码来删除子级。

于 2016-06-03T17:00:36.390 回答
1

如果您使用数据库模式来实现这一点会更好。它更快,不会出现“最大函数嵌套级别”的错误

public function up()
{
    Schema::create('comments', function(Blueprint $table)
    {
        $table->increments('id');
        $table->integer('post_id');
        $table->string('comment');
    });

    Schema::table('comments', function(Blueprint $table){
        $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
    });
}
于 2016-06-03T20:49:02.993 回答