如何解决Laravel 迁移连接表 FK 索引中是否存在错误?
我正在使用:
- Laravel 框架 8.21.0
- 10.4.14-MariaDB
对于任意两个表之间的联结表,以上面为例(表users
和roles
之间),联结表是在没有外键索引的情况下创建的。
public function up()
{
Schema::create('user_role',function (Blueprint $table) {
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->unsignedBigInteger('role_id');
$table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
$table->unique(['user_id','role_id']);
});
}
创建的索引是:
user_role_user_id_role_id_unique
user_role_role_id_foreign
缺少预期的 user_role_user_id_foreign
SELECT i.name AS `Index`,GROUP_CONCAT(f.name ORDER BY f.pos) AS `Columns`
FROM information_schema.innodb_sys_tables t
JOIN information_schema.innodb_sys_indexes i USING (table_id)
JOIN information_schema.innodb_sys_fields f USING (index_id)
WHERE t.name = '******/user_role'
GROUP BY 1
我得到了这个结果:
索引 | 列 |
---|---|
user_role_role_id_foreign |
role_id |
user_role_user_id_role_id_unique |
user_id ,role_id
|
这种行为在所有其他联结表中都是一致的:
-
user_permission
, -
role_permission
, - 等等...
如果我使用 unique
而不是 primary
,索引将是:
PRIMARY
user_role_role_id_foreign
如果我既不使用 primary
也不使用 unique
,则会创建两个外键索引:
user_role_role_id_foreign
user_role_user_id_foreign
但是这种“修复”是不可接受的。
发现用于图表的行为逆向工程没有“找到”这些关系。
现在,问题:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。