Laravel onDelete('cascade')可以工作,除了一种关系

时间:2018-08-15 14:57:21

标签: database laravel eloquent foreign-keys cascade

大多数Calculations逻辑有效。我正在使用MySQL,数据库引擎是innoDB,Laravel版本是5.5。

  • 删除评论将删除其回复。
  • 删除帖子将删除其评论和回复。
  • 删除用户将删除其帖子和回复... 但不会删除其评论

这是我的评论迁移的样子:

onDelete('cascade')

与我的回复迁移非常相似,因此不确定为什么它无法正常运行...

public function up()
{
    Schema::create('comments', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('post_id')->unsigned()->index();
        $table->integer('user_id')->unsigned()->index();
        $table->text('body');
        $table->timestamps();
        $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
    });
}

这些是我的模型的样子:

用户模型

public function up()
{
    Schema::create('replies', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('comment_id')->unsigned()->index();
        $table->integer('user_id')->unsigned()->index();
        $table->text('body');
        $table->timestamps();
        $table->foreign('comment_id')->references('id')->on('comments')->onDelete('cascade');
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
    });
}

评论模型

public function posts()
{
    return $this->hasMany(Post::class);
}
public function comments()
{
    return $this->hasMany(Comment::class);
}
public function replies()
{
    return $this->hasMany(Reply::class);
}

我在做什么错?我已经整天待在这里,但是我无法弄清楚。非常感谢您能给我任何帮助。

这是我的新手,这部分(数据库)尤其是我的薄弱点。

更新:帖子迁移

public function post() 
{
    return $this->belongsTo(Post::class);
}
public function user()
{
    return $this->belongsTo(User::class);
}
public function replies()
{
    return $this->hasMany(Reply::class);
}

然后我添加了此迁移:

public function up()
{
    Schema::create('posts', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('user_id');
        $table->string('title');
        $table->text('body');
        $table->softDeletes();
        $table->timestamps();
    });
}

这里有什么问题吗?

0 个答案:

没有答案