我有一个带有此代码的模型:
<?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中就可以了。
我尝试在另一个模型中使用代码并且正常工作。 我不知道为什么它不起作用。
解决:
我重新创建了数据库,现在一切正常。可能在各种保存尝试中,跳过了一些关系。 谢谢大家的帮助!
答案 0 :(得分:0)
我认为这与命名空间有关,并在事件中注册了正确的类。让我们稍微破解源代码:)
在:/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php
添加:
public function getAllEvents()
{
return array_keys($this->listeners);
}
并致电/转储Event::getAllEvents();
尝试两种情况(在模型和global.php中启动)并进行比较。