laravel 如何在迁移中手动自动设置索引名称?

2hh7jdfx  于 2023-01-18  发布在  其他
关注(0)|答案(1)|浏览(144)

在laravel 9应用程序中运行迁移语句(mysql数据库):

$table->foreignId('notification_config_id')
 ->nullable()
 ->references('id')
 ->on('notification_configs')
 ->onUpdate('RESTRICT')
 ->onDelete('RESTRICT');

出现错误:
数据库状态[42000]:语法错误或访问冲突:1059标识符名称'notification_configs_notification_types_notification_config_id_foreign'太长(SQL:更改表notification_configs_notification_types添加约束notification_configs_notification_types_notification_config_id_foreign外键(notification_config_id)在删除RESTRICT时引用notification_configsid)在更新RESTRICT时
看起来索引名称是自动设置的,我可以手动设置吗?我尝试了:

$table->foreignId('notification_config_id')
 ->nullable()->references('id')
 ->on('notification_configs')
 ->onUpdate('RESTRICT')
 ->onDelete('RESTRICT')
 ->name('notification_configs_longname_ref');

但是同样的错误...怎么能修复呢?
谢谢!

vptzau2j

vptzau2j1#

可以使用$table->foreign()代替$table->foreignId()。方法**foreign()**接受第二个参数作为键的名称。因此,您的迁移代码可以包含如下内容:

$table->foreign('notification_config_id', 'notification_config_foreign_id')->nullable()->references('id')->on('notification_configs')->onUpdate('RESTRICT')->onDelete('RESTRICT');

相关问题