【问题标题】:Laravel Spatie - Custom Attribute value when audit log via modalLaravel Spatie - 通过模式审核日志时的自定义属性值
【发布时间】:2022-07-14 16:06:36
【问题描述】:

在我的模式上,我有两个函数用于在数据更改时记录数据。那些在下面。

namespace App\Models;

use Spatie\Activitylog\Traits\LogsActivity;
use Spatie\Activitylog\LogOptions;
use Spatie\Activitylog\Contracts\Activity;
use Illuminate\Support\Facades\Auth;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Receivinglogentry extends Model
{
    use HasFactory;
    use LogsActivity;

    protected $fillable = [
        'status',
        'amt_shipment',
        'container',
        'po',
        'etd_date',
        'eta_date',
    ];

    protected $casts = [
        'po_ref' => 'json',
    ];

    public function getActivitylogOptions(): LogOptions
    {
        return LogOptions::defaults()->logOnly(['*'])->logOnlyDirty();
    }

    public function tapActivity(Activity $activity,string $eventName)
    {
        $current_user = Auth::user()->name;
        $event        = $activity->attributes['event'];
        $data         = $activity->relations['subject']->attributes['container'];
        $masterID     = $activity->relations['subject']->attributes['id'];

        $activity->description   = "{$current_user} has {$event} Container : {$data}";
        $activity->causer_name   = $current_user;
        $activity->master_id     = $masterID ;
        $activity->log_name      = 'Receivinglogentry';
    }
}

fillable 数据 status 已存储为整数值。但我必须将其记录为字符串值,例如PENDINGACTIVE。任何关于可定制地记录属性的建议都是适用的。

【问题讨论】:

    标签: laravel laravel-5 laravel-8 laravel-7 activitylog


    【解决方案1】:

    您可以尝试 ENUM 概念,但在 Laravel 9 及更高版本中。这是一个参考链接 - https://enversanli.medium.com/how-to-use-enums-with-laravel-9-d18f1ee35b56

    他们在那里描述了一个枚举UserRoleEnum:string,您可以根据自己的要求对其进行格式化。 在您的情况下,密钥本身是一个数字。所以我建议把它做成如下字符串。

    enum StatusEnum:string
    {
        case STATUS_101 = 'Pending';
        case STATUS_34 = 'Completed';
        case STATUS_22 = 'On hold';
    }
    

    然后使用您的可填充状态调用它,例如 "STATUS_" + $fillable.status


    如果不使用 Laravel 9,您可以尝试如下所述: https://stackoverflow.com/a/55298089/2086966

    class MyClass {
      const DEFAULT = 'default';
      const SOCIAL = 'social';
      const WHATEVER = 'whatever';
      public static $types = [self::DEFAULT, self::SOCIAL, self::WHATEVER];
    

    然后将规则写成:

    'type' => Rule::in(MyClass::$types)
    

    【讨论】:

      猜你喜欢
      • 2020-07-11
      • 2021-01-26
      • 2021-10-10
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多