Laravel使用多个主键迁移创建表

时间:2014-04-16 02:58:20

标签: php laravel laravel-4

我发出命令:

php artisan generate:scaffold order --fields="customer_id:integer(11), order_date:date, notes:text”

当它迁移时,它以错误结束:

General error: 1 table "orders" has more than one primary key (SQL: create table "orders" ("id" integer not null primary key autoincrement, "customer_id" integer not null primary key autoincrement, "order_date" date not null, "notes" text not null))

我试图在架构中使用customer_id引用一个Customer模型和相应的表。但是,它不应该是orders表的主键。

以下是阻止迁移运行的up()代码:

    Schema::create('orders', function(Blueprint $table)
    {
        $table->increments('id');
        $table->integer('customer_id', 11);
        $table->date('order_date');
        $table->text('notes');
        $table->timestamps();
    });

如何让它发挥作用?

2 个答案:

答案 0 :(得分:5)

问题是您使用函数->integer()和第二个参数。根据{{​​3}},第二个参数需要一个布尔来设置自动增量:bool $autoIncrement = false)。

试试这个:

Schema::create('orders', function(Blueprint $table)
    {
        $table->increments('id');
        $table->integer('customer_id');
        $table->date('order_date');
        $table->text('notes');
        $table->timestamps();
    });

答案 1 :(得分:1)

可能的问题可能是:

from here

问题的根源是:带有外键的列必须与该键的类型相同。你有不同的类型:INT / UNSIGNED INT

Laravel mentions this also上的文档: 注意:创建引用递增整数的外键时,请记住始终使外键列无符号。