Database Laravel onDelete(';cascade';)可以工作,只有一个关系除外

Database Laravel onDelete(';cascade';)可以工作,只有一个关系除外,database,laravel,eloquent,foreign-keys,cascade,Database,Laravel,Eloquent,Foreign Keys,Cascade,大部分的onDelete('cascade')逻辑工作正常。我使用的是MySQL,数据库引擎是innoDB,Laravel版本是5.5 删除评论将删除其回复 删除帖子将删除其评论和回复 删除用户将删除其帖子和回复。。。但不是它的评论 这就是我的注释迁移的样子: public function up() { Schema::create('comments',函数(Blueprint$表){ $table->increments('id'); $table->integer('post_id'

大部分的
onDelete('cascade')
逻辑工作正常。我使用的是MySQL,数据库引擎是innoDB,Laravel版本是5.5

  • 删除评论将删除其回复
  • 删除帖子将删除其评论和回复
  • 删除用户将删除其帖子和回复。。。但不是它的评论
这就是我的注释迁移的样子:

public function up()
{
Schema::create('comments',函数(Blueprint$表){
$table->increments('id');
$table->integer('post_id')->无符号()->索引();
$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('回复')函数(Blueprint$表){
$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');
});
}
以下是我的模型的外观:

用户模型

公共职能岗位()
{
返回$this->hasMany(Post::class);
}
公共职能评论()
{
返回$this->hasMany(Comment::class);
}
公共职能答复()
{
返回$this->hasMany(Reply::class);
}
评论模式

public function post()
{
返回$this->belongsTo(Post::class);
}
公共函数用户()
{
返回$this->belongsTo(用户::类);
}
公共职能答复()
{
返回$this->hasMany(Reply::class);
}
我做错了什么?我已经干了一整天了,但我想不出来。非常感谢你能给我的任何帮助

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

更新:发布迁移
public function up()
{
Schema::create('posts',函数(Blueprint$表){
$table->increments('id');
$table->integer('user_id');
$table->string('title');
$table->text('body');
$table->softDeletes();
$table->timestamps();
});
}
然后我添加了这个迁移:

public function up()
{
Schema::table('posts',函数(Blueprint$table){
$table->integer('user_id')->unsigned()->change();
});
Schema::table('posts',函数(Blueprint$table){
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
}

这里有什么问题吗?

Jonas Staudenmeir,谢谢您的编辑!您是如何做到的?请查看
并排标记视图:我添加了
。是否有错误?还是评论没有被删除?你的迁移对我来说很有效。是否在数据库中正确设置了所有外键约束?试着在一个空数据库上重现这个问题。是的,它不是那样工作的。当您在
MyISAM
表上创建外键时,它会被默默地忽略。然后将表转换为InnoDB时,MySQL不知道以前失败的外键。