2017-05-01 4 views
0

現在の年をどのように雄弁にデフォルト値として使用できますか?Eloquentは年形式でデフォルト値を追加します

Schema::create('year', function(Blueprint $table) { 
    $table->increments('id'); 
    $table->integer('from')->length(4)->default(1950); 
    $table->integer('to')->length(4)->default('YEAR(CURRENT_TIMESTAMP)'); // this is not working 
}); 

でもDB::raw('YEAR(CURRENT_TIMESTAMP)')

答えて

0

これはモデルイベントを使用して対処できます。

は、あなたのYearモデルに次のコードを追加します。

/** 
* Model Events 
*/ 
public static function boot() { 

    parent::boot(); 

    static::creating(function($model) 
    { 
     $model->to = date('Y'); 
    } 
} 
+0

それは解決です。しかし、私はlaravel5.4がObserverを使用して、作成、作成、削除などのイベントを観察していると思います。一つの調整は、 'from'と' to'が与えられていない場合に 'date( 'Y')'を使うことです。これはmysqlのデフォルトのように意味があります。 – Priya

+0

[私の答えはLaravel - 5.4に基づいています]をチェックしてください(http://stackoverflow.com/a/43743939/465560) – Priya

0

と私はあなたがそれを行うことはできませんとは思いません。

ただし、incrementsではなくincrementを使用し、の第2引数に4を設定することはできません。

Eloquentを使用してデータを挿入すると、新しいレコードを作成するときに、現在の年をデフォルトで入力できます。

+0

うん。私の間違い。修正されました。 – Priya

0

この実装では、働いていました。

/app/Providers/AppServiceProvider.php

use App\Model\Year; 
use App\Observers\YearObserver; 

class AppServiceProvider extends ServiceProvider 
{ 
    public function boot() 
    { 
     Year::Observe(YearObserver::class); 
    } 
} 

/app/Observers/YearObserver.php

namespace App\Observers; 
use App\Model\Year; 

class YearObserver 
{ 
    public function creating(Year $year) 
    { 
     if (empty($year->to) || !is_numeric($to)) { 
      $year->to = date('Y'); 
     } 
    } 
} 
関連する問題