Laravel模型事件不会触发

时间:2015-02-13 15:19:04

标签: php laravel-4 eloquent

我有一个带有此代码的模型:

<?php

 use Illuminate\Database\Eloquent\SoftDeletingTrait;

 class Intervention extends Eloquent {

    use SoftDeletingTrait;
    protected $fillable = array('start_date','stove_id','description','operation_mode','store_id','user_id','intervention_status_id','code');

    public function operations()
    {
        return $this->hasMany('InterventionOperation');
    }

    public function store()
    {
      return $this->belongsTo('Store');
    }

    public function stove()
    {
      return $this->belongsTo('Stove');
    }

    public function user()
    {
      return $this->belongsTo('User');
    }

    public function statues()
    {
      return $this->hasMany('InterventionStatus');
    }

然后启动

    public static function boot()
    {
        parent::boot();
        static::creating(function($intervention)
        {
          exit("creating");
        });

        static::created(function($intervention){
          exit("created");
        });

        static::updating(function($intervention)
        {
          exit("updating");
        });
    }

控制器:

$intervention = new \Intervention(\Input::all());
$status = \Status::find(\Input::get('status')['id']);
$interventionStatus = new \InterventionStatus();
$interventionStatus->change_status_date = new \DateTime();
$interventionStatus->status()->associate($status);
$interventionStatus->description = "";

$user = \Auth::user();
$store = $user->store;
$intervention->store()->associate($store);
$intervention->user()->associate($user);
$intervention->request_date = new \DateTime();

$intervention->save();
...

但是在保存模型时,不会调用创建回调。

我尝试在parent :: boot()之后输出exit(&#34; test&#34;);然后触发退出。

如果我将事件的代码放在app / start / global.php中就可以了。

我尝试在另一个模型中使用代码并且正常工作。 我不知道为什么它不起作用。

解决:

我重新创建了数据库,现在一切正常。可能在各种保存尝试中,跳过了一些关系。 谢谢大家的帮助!

1 个答案:

答案 0 :(得分:0)

我认为这与命名空间有关,并在事件中注册了正确的类。让我们稍微破解源代码:)

在:/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php

添加:

public function getAllEvents()
{
    return array_keys($this->listeners);
}

并致电/转储Event::getAllEvents(); 尝试两种情况(在模型和global.php中启动)并进行比较。