[英]Cannot add foreign key constraint on vps server
所以我在本地使用我的项目并运行此代码php artisan migrate
一切工作完全正常,我的表将被创建
但当我移动到我的vps并做同样的事情时,我得到了这个错误
[Illuminate \\ Database \\ QueryException] SQLSTATE [HY000]:常规错误:1215无法添加外键约束(SQL:alter table
mediables
add constraintmediables_media_id_foreign
gn key(media_id
)引用删除级联上的media
(id
))
我从这个网站采取了一些解决方案,但他们没有工作
我的迁移文件:
Schema::create('media', function (Blueprint $table) {
$table->increments('id');
$table->string('name')->nullable();
$table->string('old_name')->nullable();
$table->text('desc')->nullable();
$table->string('category')->nullable();
$table->string('type');
$table->string('format');
$table->string('href');
$table->string('thumbnail')->nullable();
$table->timestamps();
});
Schema::create('mediables', function (Blueprint $table) {
$table->integer('media_id')->nullable();
$table->integer('mediable_id');
$table->string('mediable_type');
$table->primary(['media_id','mediable_id','mediable_type']);
$table->timestamps();
});
Schema::table('mediables', function (Blueprint $table) {
$table->foreign('media_id')
->references('id')->on('media')
->onDelete('cascade');
});
请注意,我的项目中的媒体和其他模型之间存在多态关系
我的本地机器和我的vps之间的唯一区别是我在本地有apache和vps上的nginx如果它是相关的
media
表应该有id
列,因为media_id
引用它。
另外,如果id
是increment()
,则应使用unsigned()
外键:
$table->integer('media_id')->unsigned()->nullable();
如果你正在使用新的WAMP照顾它的mysql,因为默认情况下即使在不存在的列之间也会接受任何关系
$table->foreign('media_id')
->references('id')->on('media')
->onDelete('cascade');
media
表中不存在id
。
还有$table->primary(['media_id','mediable_id','mediable_type']);
将不会运行,因为您已经将主要id
设置为$table->increments('id');
将id
设置为主要。
您必须默认将表引擎设置为InnoDB
或使用显式设置
$table->engine = 'InnoDB';
只有InnoDB
引擎处理外键约束。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.