【发布时间】:2014-09-13 20:37:18
【问题描述】:
我在用户和角色之间有一个多对多的关系,有一个 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');
});
}
因此,根据文档,我将外键设置为无符号。
现在,我添加了几个用户,并附加了一些角色 - 一切正常。但是,当我删除一个用户 (User::destroy(2)) 时,role_user 表中该用户的行不会被删除,这会导致冗余行。
我做错了什么?
- MySQL + InnoDB
编辑:抓取模型并应用->delete(); 也有相同的效果。
【问题讨论】:
-
您是否在 MySQL 中创建了关系?在 PHPMyAdmin 等软件中检查您的表结构。也尝试删除
$table->integer('user_id')->unsigned(); -
我安装了 PHPMyAdmin - 我在哪里查看关系?会有一个公牛。
-
那里什么都没有。令人困惑...迁移期间没有抛出错误。
-
好的,我手动设置了
$table->engine = 'InnoDB';,现在它可以工作了,即使它在数据库的“类型”列下显示“InnoDB”。很奇怪。
标签: sql laravel eloquent foreign-key-relationship