[帮助]删除记录时我还需要创建一个deleted_by值。
[公司表]
|名字| created_by | updated_by | deleted_by | created_at | updated_at | deleted_at |
public static function boot()
{
static::creating(function($company)
{
$company->created_by = Auth::user()->id;
});
}
这将在我们创建记录时用用户ID填充。
但是当我在删除记录时使用它(使用软删除)
public static function boot()
{
parent::boot();
static::deleting(function($company)
{
$company->deleted_by = Auth::user()->id;
});
}
此方法不起作用,deleted_by列未更新 删除记录时如何用用户ID填写deleted_by? 先谢谢
答案 0 :(得分:1)
目前,Laravel的delete()
方法在创建相关的UPDATE
查询时不会考虑其他属性更改。这是Eloquent\Model::performDeleteOnModel()
的代码段:
$query = $this->newQuery()->where($this->getKeyName(), $this->getKey());
if ($this->softDelete)
{
$this->{static::DELETED_AT} = $time = $this->freshTimestamp();
$query->update(array(static::DELETED_AT => $this->fromDateTime($time)));
}
else
{
$query->delete();
}
由于newQuery()
,在构建实际数据库查询时不会考虑对象所做的更改。
您可以扩展Model类并添加自己的功能以接受任何更改的属性,或者只需在$company->save()
闭包中添加static::deleting()
即可。与第一个选项相比,它将执行两个查询,但只需几秒钟即可实现。你的选择!