一般错误:1005无法创建表 - Laravel 4.2无法创建外键

时间:2016-05-22 19:17:38

标签: php database laravel foreign-keys migration

我尝试创建一个表并添加外键,但它只创建了表,但它没有添加外键。我收到此错误消息:

[Illuminate\Database\QueryException] SQLSTATE[HY000]: General error: 1005 Can't create table 'myDB.#sql -4b4_1a5e43' (errno: 150) (SQL: alter table形式add constr aint forms_id_foreign foreign key ( ID为) references {页{1}}   id`))

我的迁移看起来像这样:

(

我的表public function up() { Schema::create('forms', function(Blueprint $table) { $table->engine = 'InnoDB'; $table->string('id')->nullable(); $table->string('url', 100); $table->string('title', 100); $table->timestamps(); }); Schema::table('forms', function(Blueprint $table) { $table->foreign('id')->references('id')->on('pages'); }); } 没有主键。它应该是forms列,它是id表上的外键引用id

我已搜索到该问题,并将pages添加到nullable()列并

id

迁移但仍无结果。

我哪里错了?感谢。

1 个答案:

答案 0 :(得分:0)

<强> EDITED

经过一番锻炼后,我能够找出问题的原因以及如何解决问题。因为它的字符串字段sql允许索引字符串类型的外键。所以在id字段中添加索引。

    public function up()
    {
        Schema::create('forms', function(Blueprint $table)
        {
            $table->string('id')->nullable()->index();
            $table->string('url', 100);
            $table->string('title', 100);
            $table->timestamps();

            $table->foreign('id')
            ->references('id')
            ->on('pages');

        });
    }

以相同的方式索引make table table id列。你说我你没有移民档案。只需转到数据库并将索引添加到 id 字段。之后运行上述迁移。测试和工作正常。如果你为页面创建一个迁移文件,那就像这样

    Schema::create('pages', function(Blueprint $table)
    {
        $table->string('id')->nullable()->index();
    .........