我的模型的updating
方法有model event。
Hotel::updating(function($hotel) {
// Update cache
$hotel->q = $hotel->country->name . " " . $hotel->destination->name;
});
如果我使用eloquent保存()单个对象,这很有效。
但是,我想编写一个工匠任务,为表中的每个行更新该字段。如何触发表中每行的模型事件?
我尝试使用类似Event::fire('eloquent.updating', function(Hotel::self);
的内容,因为模型事件基于常规事件。然而,这给我一个错误。
答案 0 :(得分:0)
您确定模型会触发eloquent.updating
事件。但是,要允许事件调度程序为正确的模型触发事件,模型名称将附加到事件命名空间。这是用于触发模型事件的代码:
protected function fireModelEvent($event, $halt = true)
{
if ( ! isset(static::$dispatcher)) return true;
// We will append the names of the class to the event to distinguish it from
// other model events that are fired, allowing us to listen on each model
// event set individually instead of catching event for all the models.
$event = "eloquent.{$event}: ".get_class($this);
$method = $halt ? 'until' : 'fire';
return static::$dispatcher->$method($event, $this);
}
您的模特活动实际上是:eloquent.updating: Hotel
。这自然意味着模型正在使用相同的语法进行监听。
出于好奇,您为什么需要手动触发事件?您可以在工匠任务中使用模型本身,为您解雇它们。