2016-09-26 6 views
0

は、私のような注文を持つテーブルを持っている:laravel新しい列のデフォルト値のcreated_at値

注文

id 
created_at 
shipped_at 
billed_at 

shipped_atがinvoice.Theフィールドのパッキングリストとbilled_at上でshipped_atと最近billed_atが追加されました。

オーダーを作成するときに、オーダーが将来のものである場合、created_atの日付にカスタム日付を付けることがあります(これはcreated_atの背後にあるオリジナルのアイデアではありませんでした)。私が欲しいのは、created_atの値が作成時にshipped_atとbilled_atにコピーされるということです。なぜなら私は時にはcreated_atのカスタム値を使用するので、現在の日付時刻を使用することができないからです。

注文を作成する5つの場所から同じ関数を呼び出すのではなく、これらの値をコピーする関数を1つ作成するだけで、5つの異なる場所に注文を作成できます。

laravelフレームワークにcreated_atの値をshipped_atにコピーするための巧妙な場所がありますか?

思考: Normaly私は節約のようなイベントが最善だと思うだろうが、保存した後のcreated_atが作成され、それは/更新保存されたイベントに保存するか、これはのINFINITループを作成しますすることが可能です省エネ?新しいプロバイダを作成するには、コマンドライン

php artisan make:provider OrderDatesProvider 

:aynberコメントへ

+2

'created'イベントを使ってみましたか?それは作成後にトリガーするはずですが、「作成中」は実行中です。 – aynber

答えて

0

おかげで、私は、次の解決策を考え出した作成されたイベントを使用します。プロバイダ内:

<?php 

namespace App\Providers; 

use App\Order; 
use Illuminate\Support\ServiceProvider; 

class OrderDatesProvider extends ServiceProvider 
{ 
    /** 
    * Bootstrap the application services. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 

     Order::created(function($order){ 
      $order->shipped_at = $order->created_at; 
      $order->billed_at = $order->created_at; 
      $order->save(); 
     }); 

    } 

    /** 
    * Register the application services. 
    * 
    * @return void 
    */ 
    public function register() 
    { 
     // 
    } 
} 
関連する問題