无法在vps服务器

时间:2016-12-26 08:20:37

标签: php laravel

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

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

  

[照亮\数据库\ QueryException]     SQLSTATE [HY000]:常规错误:1215无法添加外键约束(SQL     :alter table mediables添加约束mediables_media_id_foreign forei     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如果它是相关的

3 个答案:

答案 0 :(得分:2)

media表应包含id列,因为media_id引用了该列。

此外,如果idincrement(),则应使用unsigned()外键:

$table->integer('media_id')->unsigned()->nullable();

答案 1 :(得分:1)

如果您正在使用新的WAMP,请关注它的mysql,因为默认情况下即使在非现有列之间也会接受任何关系,例如

$table->foreign('media_id')
        ->references('id')->on('media')
        ->onDelete('cascade');

id表格中不存在media

同样$table->primary(['media_id','mediable_id','mediable_type']);将无法运行,因为您已经设置了主要id,因为$table->increments('id');会将id设置为主要内容。

答案 2 :(得分:1)

默认情况下,您必须将表格引擎设置为InnoDB,或使用

明确设置
$table->engine = 'InnoDB';

只有InnoDB引擎处理外键约束。