0

任何人都可以详细告诉我如何扩展 Illuminate\Database\Schema 以添加 zerofill 函数并修改当前整数函数以获取长度参数,同时实际上并未修改任何供应商文件.

非常感谢你。

编辑:或者有没有办法使用 Schema Builder 手动添加一列,我只是错过了周五下午沉重的头的原因?

编辑:采用 Gareth Oakley 建议的方法,在 Schema::create() 之后添加 DB::statement() 调用:

<?php

    class CreateExamplesTable extends Migration {

        public function up()
        {
            Schema::create('examples', function(Blueprint $table)
            {
                $table->engine = 'InnoDB';

                $table->increments('id')->unsigned();
                $table->integer('account_id')->unsigned();
                $table->string('card_id', 20)->nullable();
                $table->boolean('active')->default(true);
                $table->timestamps();

                $table->foreign('account_id')->references('id')->on('accounts')->onDelete('cascade')->onUpdate('cascade');
            });

            DB::statement('ALTER TABLE examples ADD invoice_id INT(6) UNSIGNED ZEROFILL NOT NULL AFTER card_id');
        }

        public function down()
        {
            Schema::drop('examples');
        }
    }
4

1 回答 1

2

我以前不需要使用 zerofills - 我猜你指的是这个功能:

当与可选(非标准)属性 ZEROFILL 结合使用时,空格的默认填充将替换为零。例如,对于声明为 INT(4) ZEROFILL 的列,值 5 被检索为 0005。

鉴于它不是标准 SQL 属性,您可能必须使用 DB 类手动创建列:

DB::statement('ALTER TABLE MyTable ADD MyColumn INT UNSIGNED ZEROFILL NOT NULL');

架构构建非常适合大多数不需要使用数据库特定功能但看起来其他人偶尔不得不做类似事情的情况:

在 Laravel 迁移中使列不可为空

于 2013-07-26T11:25:42.940 回答