2016-04-27 12 views
0

Iamの一括挿入このコマンドを使用してチャンクに大規模なデータベースを:Laravelの保存イベント

DB::table($table)->insert($chunk); 

しかし、私はinsert実際の操作の前に、私は$chunk配列を変更できるようにしたいです旺旺データベースに入る特定の属性を追加/削除するための各テーブル用私のモデルでは、私のセットアップsavingイベントを行うために:

public static function boot() 
{ 
    parent::boot(); 

    static::saving(function ($model) { 
     Log::info('saving'); 
     return true; 
    }); 
} 

をしかし、イベントがModel::insert操作のために動作しませんようです。

どのように私はこれを達成することができますか?

PS:私は各チャンクの一括挿入を行う必要がありますが、一度に1つのレコードを保存することしかできないので、save()(イベントを保存するには効果がありますが)メソッドを使用することはできません。

おかげで、あなたがあなた自身のイベント/ LISTNERを作成する必要があります。この場合

答えて

2

。このような

何か:

php artisan make:event SomeEventName

//App\Events\SomeEventName 

class SomeEventName extends Event 
{ 
    use SerializesModels; 

    public $chunk; 

    /** 
    * Create a new event instance. 
    * 
    * @return void 
    */ 
    public function __construct(&$chunk) 
    { 
     $this->chunk = &$chunk; 
    } 
} 

次に、あなたのリスナーが(あなたがlaravel docsに応じて別のファイルを作成することができます)、または単にブートモデル法の上に置く作る

\Event::listen('App\Events\SomeEventName', function($event) { 
     $event->chunk = ['hello new world']; // this will replace the old chunk 
}); 

これを次のように使用します。

$chunk = ['hello old world']; 
event(new App\Events\SomeEventName($chunk)); 
dd($chunk); 
DB::table($table)->insert($chunk); 
+0

恐ろしい、ありがとう! – dev02

関連する問題