2017-08-07 27 views
0

我有几个表,我需要tinyint字段必须是unsigned并设置为auto_incrementLaravel 5.3:自动递增无符号TINYINT

L5.3 Database : Migrations documentation有一个方法来定义unsigned auto-incrementing tinyint。我试图用DB::update()来实现它。为表我的迁移文件看起来像:

public function up() 
{ 
    Schema::create('table_name', function (Blueprint $table) 
    { 
     $table->unsignedTinyInteger('field1'); 
     $table->string('field2', 255); 
     $table->primary('field1'); 
     $table->index('field2'); 

     $field = "field1"; 
    }); 

    $this->addAutoIncrements($field);  

} 

public function addAutoIncrements($field) 
{ 
    DB::update('ALTER TABLE table_name MODIFY $field TINYINT UNSIGNED NOT NULL AUTO_INCREMENT'); 
} 

当我尝试php artisan migrate这样的迁移文件,它迁移没有任何错误,但不分配auto-increment

我该如何解决这个问题?我应该将更新作为完整的新迁移来完成吗?有没有人做过?

+0

'$ table-> unsignedTinyInteger('field1') - >增量();' – Ali

+0

@Ali:这是我第一次尝试。没有工作。 –

回答

2

unsignedTinyInteger()方法的第二个参数是一个布尔值,用于标记它是否为自动增量字段。它默认为false,所以您只需更新您的迁移即可通过true

$table->unsignedTinyInteger('field1', true); 

作为未来的一个说明,在Laravel 5.4.16添加了tinyIncrements()方便的方法来这样做。

+0

不得不把'$ table-> primary('field1')'作为'unsignedTinyInteger('field1',true)'来处理它。 –