laravel 4模型事件更新softdelete上的记录

时间:2014-03-18 03:15:29

标签: laravel laravel-4

[帮助]删除记录时我还需要创建一个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? 先谢谢

1 个答案:

答案 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()即可。与第一个选项相比,它将执行两个查询,但只需几秒钟即可实现。你的选择!