【问题标题】:Laravel 5.3 : Auto Incrementing Unsigned TINYINTLaravel 5.3:自动递增无符号 TINYINT
【发布时间】:2018-01-14 20:55:29
【问题描述】:

我有几个表需要tinyint 字段,这些字段必须是unsigned 并设置为auto_increment

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

我该如何解决这个问题?我应该将更新作为全新的迁移进行吗?有人做过吗?

【问题讨论】:

  • $table->unsignedTinyInteger('field1')->increments();
  • @Ali :这是我首先尝试的。没用。

标签: mysql laravel laravel-5.3 database-migration


【解决方案1】:

unsignedTinyInteger() 方法的第二个参数是一个布尔值,用于标记是否为自动递增字段。它默认为false,因此您只需更新您的迁移以传入true

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

作为将来的说明,Laravel 5.4.16 中添加了 tinyIncrements() 便捷方法来完成此操作。

【讨论】:

  • 必须使用$table->primary('field1'),因为unsignedTinyInteger('field1', true) 会处理它。
猜你喜欢
  • 1970-01-01
  • 2011-09-30
  • 2011-02-13
  • 2012-02-23
  • 2015-01-09
  • 1970-01-01
  • 2017-05-13
  • 2019-12-08
  • 2013-04-11
相关资源
最近更新 更多