2017-06-14 10 views
0

私は私のプロジェクト(私はLaravelを使用していません)でEloquentを使用していて、期待通りに動作します。問題はありますが、モデル上でイベントを設定する際に問題があります。例えばLaravel Eloquent 5.4モデルイベント

:モデルを更新するときに、私は他の何かをしたいか何かをモデルに保存されている場合、等...

はまだ雄弁5.4 で働いて、このコードはありますか?私はいくつかの試みをしたが、これで失敗した。おそらくこれはもう役に立ちませんEloquent 5.4と私はそれに代わるものが必要です。

class Something extends Model { 
    public static function boot() { 
     parent::boot(); 
     static::creating(function($item) { 
      $item->uuid = uuid_generate(); 
     }); 
    } 
} 

解決策が必要な場合は、Laravel-way以外の解決策が必要です。モデルそのものの中でこれらの出来事をキャッチすることができることを願っています。

+0

おそらく動作するはずですが、推奨される方法が変更されています。ここでドキュメントを見てください:https://laravel.com/docs/5.4/eloquent#events –

+0

イベントは発生しますが、あなたは実際にそれらのイベントで何かをするディスパッチャーを登録する必要があります。 Laravel内でEloquentを使用します。 –

+0

上記のコードは動作しません。それを行うにはどうしても簡単なのですか?私はこのディスパッチャを書く必要がありますか? –

答えて

0
use Illuminate\Database\Capsule\Manager as Capsule; 

$capsule = new Capsule; 

$capsule->addConnection([ 
    'driver' => 'mysql', 
    'host'  => 'localhost', 
    'database' => 'database', 
    'username' => 'root', 
    'password' => 'password', 
    'charset' => 'utf8', 
    'collation' => 'utf8_unicode_ci', 
    'prefix' => '', 
]); 

// Set the event dispatcher used by Eloquent models... (optional) 
use Illuminate\Events\Dispatcher; 
use Illuminate\Container\Container; 
$capsule->setEventDispatcher(new Dispatcher(new Container)); 

// Make this Capsule instance available globally via static methods... (optional) 
$capsule->setAsGlobal(); 

// Setup the Eloquent ORM... (optional; unless you've used setEventDispatcher()) 
$capsule->bootEloquent(); 

作曲はあなたが雄弁にオブザーバーを使用する必要があるときに必要な「点灯/イベント」が必要です。

イベントやオブザーバーが機能するためには、このような外部プロジェクトでEloquentを設定する必要があります。イベントの設定

class Something extends Model { 
    public static function boot() { 
     parent::boot(); 
     static::creating(function($item) { 
      $item->uuid = uuid_generate(); 
     }); 
    } 
} 

class Something extends Model { 
    protected $events = [ 'created' => createdEvent::class] 
} 

は、より多くのドキュメントをチェックしますが、両方の方法は、まだ雄弁5.4で動作します。

関連する問題