在 Laravel 迁移中创建一个具有自定义大小的小整数列

Posted

技术标签:

【中文标题】在 Laravel 迁移中创建一个具有自定义大小的小整数列【英文标题】:Create a tiny integer column with custom size in Laravel migration 【发布时间】:2018-01-29 21:55:41 【问题描述】:

如何使用 laravel 迁移到 mysql 添加微小的整数列?我以为这段代码

$table->addColumn('tinyInteger', 'birth_day', ['lenght' => 2]);

但它会创建 TINYINT(4) 列。我不知道如何解决这个问题。请不要问我为什么只有一天,而不是完整的日期。这是应用程序的业务逻辑。

【问题讨论】:

试试:$table->addColumn('unsignedTinyInteger', 'birth_day', ['lenght' => 2]); 它不起作用,错误:Call to undefined method Illuminate\Database\Schema\Grammars\MySqlGrammar::typeUnsignedTinyInteger() Laravel 迁移不是 MySQL 特定的,因此如果您正在开发一个无法控制数据库层的项目,我不建议创建特定于 MySQL 的迁移。这也会妨碍您的测试环境,因为大多数开发人员都会使用 sqlite。 【参考方案1】:

我用纯sql解决我的问题

DB::statement("ALTER TABLE `users` 
ADD `birth_day` TINYINT(2) DEFAULT NULL AFTER `lastname`");

【讨论】:

【参考方案2】:
   /**
     * Create a new tiny integer (1-byte) column on the table.
     *
     * @param  string  $column
     * @param  bool  $autoIncrement
     * @param  bool  $unsigned
     * @return \Illuminate\Support\Fluent
     */
    public function tinyInteger($column, $autoIncrement = false, $unsigned = false)
    
        return $this->addColumn('tinyInteger', $column, compact('autoIncrement', 'unsigned'));
    

这是 Blueprint.php 中的 tinyInteger() 函数。如您所见,这里需要一个布尔参数。看起来您正在尝试添加大小参数。你不能在 Laravel 中指定 tinyInt 的大小。

改为使用

$table->tinyInteger('birth_day'); // `birth_day` tinyint(3)

【讨论】:

【参考方案3】:

在我看来你的“长度”拼写错误,不妨试试$table->addColumn('tinyInteger', 'birth_day', ['length' => 2]);

【讨论】:

以上是关于在 Laravel 迁移中创建一个具有自定义大小的小整数列的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 迁移中创建自引用关系(外键)?

在 Swift 3 中创建具有自定义大小的 VideoPlayer

如何从迁移中创建 Laravel 模型?

如何在 laravel 中创建自定义关系?

仅在 Laravel 中使用单个命令创建模型和迁移? [关闭]

在迁移 laravel 5.2 中创建数据库视图