Laravel 5.2 [PDOException] SQLSTATE [42000] - 创建两个auto_increment主键字段

时间:2016-03-08 22:34:15

标签: php mysql laravel-5

美好的一天,我有两个迁移表,第一个用于创建客户架构:

Schema::create('customers', function (Blueprint $table) {
        $table->increments('id');
        $table->string('first_name',45);
        $table->string('middle_name',45)->nullable();
        $table->string('last_name',45);
        $table->string('gender',45);
        $table->string('dob',45);
        $table->string('martial_status',45);
        $table->string('home_phone',12)->nullable();
        $table->string('mobile_phone',12);
        $table->string('work_phone',12);
        $table->string('id_number',12);
        $table->string('id_type',45);
        $table->string('id_exp',20);
        $table->date('id_issue_date');
        $table->text('id_image')->nullable();
        $table->timestamps();

第二个用于创建customer_address架构:

   Schema::create('customers_address', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('customer_id')->unsigned();
        $table->foreign('customer_id')->references('id')->on('customers')->onDelete('cascade');
        $table->string('address_line1',20);
        $table->string('address_line2',20)->nullable();
        $table->string('ownership',20);
        $table->string('country');
        $table->string('town_city');
        $table->string('parish_state');
        $table->integer('years_at_address',10);
        $table->timestamps();
    });

运行php artisan migrate时,我的终端出现错误[PDOException]   SQLSTATE [42000]:语法错误或访问冲突:1075表定义不正确;只能有一个自动列,必须将其定义为键。

我能得到这个的原因是什么,因为我不知道我在这里做错了什么。在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

$table->integer('years_at_address',10);应为$table->integer('years_at_address');第二个参数为boolean,如果为true,则将整数计为主键。

这是整数函数在BluePrint类中的Laravel框架中的样子:

public function integer($column, $autoIncrement = false, $unsigned = false)
{
    return $this->addColumn('integer', $column, compact('autoIncrement', 'unsigned'));
}

因此,通过将其设置为10,您告诉Laravel迁移功能,您希望将此列视为autoIncrement,并最终将其视为主键。