2013-07-26 160 views
0

任何人都可以详细告诉我如何去扩展Illuminate \ Database \ Schema以添加一个zerofill函数,并修改当前的整数函数以获取长度参数,而不是实际上修改任何供应商文件。扩展架构生成器

谢谢。

编辑:或者有没有办法用架构生成器手动添加列,我只是失去了沉重的星期五下午头的原因?

编辑:去与方法,通过加雷思奥克利的建议通过增加DB ::声明()调用之后架构::创建():

<?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'); 
     } 
    } 
+0

Laravel不提供此功能。你可以选择一个小整数/整数/大整数类型 - 获得最适合的一个。 Personaly我不会在数据库端使用zerofill。我会在应用程序端格式化输出。 – Andreyco

+0

我已经在下面发布了一个答案 - 但同意。我通常会留下任何与数据如何在数据库之外呈现并将其放入我的视图中相关的东西。你可以使用'str_pad' - http://php.net/manual/en/function.str-pad.php –

回答

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

+0

尽管这并不是我真正想做的事情,它仍然是最简单的常识实现,所以非常感谢你。 –