Laravel 审核更新事件不起作用
Posted
技术标签:
【中文标题】Laravel 审核更新事件不起作用【英文标题】:Laravel Auditing update event not working 【发布时间】:2021-10-13 09:36:33 【问题描述】:Laravel 更新审核在我的 laravel eloquent 应用程序中的少数模型中不起作用。除了用户模型。以下是audit.php
事件
'events' => [
'created',
'updated',
'deleted',
'restored',
],
'strict' => false,
'timestamps' => true,
'console' => true,
我的模型设置如下
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use OwenIt\Auditing\Contracts\Auditable;
use Illuminate\Support\Arr;
class Order extends Model implements Auditable
use \OwenIt\Auditing\Auditable;
use HasFactory;
protected $fillable = [
'order_date',
'cancel_date',
'comment',
'remark',
'customer_auto_id',
'customer',
];
public function transformAudit(array $data): array
Arr::set($data, 'recode_auto_id', $this->attributes['id']);
return $data;
public function customer()
return $this->hasOne(User::class, 'id', 'customer_auto_id');
创建和删除在审核时工作正常,但更新不是审核。请告诉我解决方案。
【问题讨论】:
您确定要在更新时更改模型实例的任何字段吗?如果实例保持不变,则不会触发更新。 是的,我确定我已经更新了。当我更改用户列时,它会记录审核,但不会记录其他模型。 【参考方案1】:我找到了解决方案。在 laravel 上,可以有两种方法来更新 recode
方法 01.
$Object = Order::where('id', $order)
->update([
'name'=>$request->name,
'phone'=>$request->phone,
]);
方法02。
$Object = Order::find($id);
$Object ['name'] = $request->name;
$Object ['phone'] = $request->phone;
$Object ->save();
起初,我尝试使用方法 01 审核日志。该方法不会登录更新,但会记录创建和删除的日志。因此我尝试了方法 02,它成功记录了创建、更新和删除事件。我个人认为方法 02 可以找到列,因为它检索每一列,然后保存更改,以便 laravel 可以识别更改以命中日志。使用方法02解决问题。
$Object = Order::find($id);
$Object ['name'] = $request->name;
$Object ['phone'] = $request->phone;
$Object ->save();
【讨论】:
超级个人推荐/意见:不要$object['index']
,如果是模型,请$object->index
,因为你使用的IDE会100%跟踪它......不会混淆任何人它是 100% 的对象。以上是关于Laravel 审核更新事件不起作用的主要内容,如果未能解决你的问题,请参考以下文章
在 MySQL 中更新记录时,Laravel 的 useCurrent() 不起作用