美好的一天,我有两个迁移表,第一个用于创建客户架构:
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表定义不正确;只能有一个自动列,必须将其定义为键。
我能得到这个的原因是什么,因为我不知道我在这里做错了什么。在此先感谢您的帮助。
答案 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
,并最终将其视为主键。