Laravel Spatie - 通过模式审核日志时的自定义属性值

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

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

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。任何关于自定义记录属性的建议都会被采纳。

最佳答案

你可以尝试 ENUM 概念,但从 Laravel 9 开始。这是引用链接 - https://enversanli.medium.com/how-to-use-enums-with-laravel-9-d18f1ee35b56

在那里,他们描述了一个枚举UserRoleEnum:string,您可以根据自己的要求格式化它。 就您而言, key 本身就是一个数字。所以我建议将其设置为如下字符串。

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)

关于Laravel Spatie - 通过模式审核日志时的自定义属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71428309/

相关文章:

Laravel Eloquent 查询,带有可选参数

php - Laravel:1215 无法添加外键约束 - 迁移时

php - Laravel 5 在选择查询中选择

Laravel Blade - 检查数据数组是否具有特定键

php - Laravel Multi-Tenancy

laravel - 类 Illuminate\Support\Facades\RateLimiter 未找到

mysql - 每月计算结果并聚合的 Laravel 原始查询

migration - 将字段添加到 Laravel 迁移架构

javascript - 如何在 Laravel 8 中使用 JavaScript 获取?

通过电子邮件验证电子邮件 :rfc, dns 的 Laravel faker 电子邮件