扩展Schema Builder

时间:2013-07-26 05:40:28

标签: laravel laravel-4

任何人都可以非常详细地告诉我如何扩展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');
        }
    }

1 个答案:

答案 0 :(得分:2)

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

  

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

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

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

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

Make column not nullable in a Laravel migration