繁体   English   中英

无法在vps服务器上添加外键约束

[英]Cannot add foreign key constraint on vps server

所以我在本地使用我的项目并运行此代码php artisan migrate一切工作完全正常,我的表将被创建

但当我移动到我的vps并做同样的事情时,我得到了这个错误

[Illuminate \\ Database \\ QueryException] SQLSTATE [HY000]:常规错误:1215无法添加外键约束(SQL:alter table mediables add constraint mediables_media_id_foreign gn key( media_id )引用删除级联上的mediaid ))

我从这个网站采取了一些解决方案,但他们没有工作

我的迁移文件:

 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引用它。

另外,如果idincrement() ,则应使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM