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-&gt;index,因为你使用的IDE会100%跟踪它......不会混淆任何人它是 100% 的对象。

以上是关于Laravel 审核更新事件不起作用的主要内容,如果未能解决你的问题,请参考以下文章

laravel 更新在登录功能中不起作用

更新不起作用时 Laravel 保存(奇怪的行为)

Laravel 收银员数量增量更新不起作用

在 MySQL 中更新记录时,Laravel 的 useCurrent() 不起作用

Laravel 5.1 Php artisan 命令在作曲家更新后不起作用

Laravel migrate:refresh 在 Composer 更新后不起作用