我每次从数据库中检索它时都需要更新我的person对象,然后再次保存..但是怎么做?
我的对象Person,其bool属性seen_by_organization在创建时为0。 第一次从数据库中检索Person时,我想将seen_by_organization设置为1。
我已尝试进入构造函数,但似乎无法正常工作
public function __construct(array $attributes = array())
{
parent::__construct($attributes);
if($this->seen_by_organization == 0)
{
$this->seen_by_organization = 1;
$this->save();
}
}
我知道一种方法将代码绑定到“保存时”,但不是“在获取之前”或“在获取之后”。
protected static function boot()
{
parent::boot();
//This is on saving
static::saving(function($model)
{
});
//Is there something like this ?
static::getting(function($model)
{
}
}
我希望你能帮助我
谢谢!
答案 0 :(得分:2)
此处没有内置事件。此外created
不是您需要的 - 当将新模型插入存储时会触发它。
你需要这样的东西:
// This is called after fetching data from db
// override it in order to fire the event you need
public function setRawAttributes(array $attributes, $sync = false)
{
parent::setRawAttributes($attributes, $sync);
$this->fireModelEvent('loaded', false);
}
// add handler for new event
public static function loaded($callback)
{
static::registerModelEvent('loaded', $callback);
}
// do the job
public static function boot()
{
parent::boot();
static::loaded(function ($user) {
if($user->exists && $user->seen_by_organization == 0)
{
$user->seen_by_organization = 1;
$user->save();
}
});
}
请注意,将使用get()
或first()
等检索每个模型,因此可能会有多个inserts
。
答案 1 :(得分:0)
我明白了!
创建活动的名称
protected static function boot()
{
parent::boot();
static::created(function($model)
{
if($model->seen_by_organization == 0)
{
$model->seen_by_organization = 1;
$model->save();
}
});
}