我在用户和角色之间存在多对多关系,并且有一个role_user表。我的迁移设置如此(简化):
users
表:
public function up()
{
Schema::create('users', function(Blueprint $table)
{
$table->increments('id');
$table->string('email')->unique();
});
}
roles
表:
public function up()
{
Schema::create('roles', function(Blueprint $table)
{
$table->increments('id');
$table->string('name');
});
}
role_user
表:
public function up()
{
Schema::create('role_user', function(Blueprint $table)
{
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->integer('role_id')->unsigned();
$table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
});
}
因此,根据文档,我将外键设置为unsigned。
现在,我添加了几个用户,并附加了一些角色 - 一切正常。但是,当我删除用户(User::destroy(2)
)时,role_user
表中该用户的行不会被删除,这会导致冗余行。
我究竟做错了什么?
编辑:抓住模型并应用->delete();
也具有相同的效果。
尝试创建此表时尝试设置。这个修复对我有用。
$table->engine = 'InnoDB';
检查MySQL配置。 my.ini可能还有default-storage-engine=MYISAM
。设置为default-storage-engine=InnoDB
,您应该避免在每次迁移中添加此修复程序的麻烦。