如何使用 laravel 5.1 使用更新记录的 user_id 填充 modded_by ?

2024-02-19

使用 Laravel 5.1 时,我尝试创建一个观察者,它将自动更新以下 3 列

  1. created_by:当创建的记录“不再更新”时填充
  2. Modified_by:每次修改记录时填充新值
  3. purged_by:软删除记录时填充一个值。

我知道 Eloquent 会自动更新日期时间戳(created_by、updated_at、removed_at),但我需要更新进行更改的 user_id。

建议我使用观察者和一个特征来处理这个问题。这是我所做的

1)创建了一个名为“ModelSignature”的观察者类,位于app\Observers\ModelSignature.php这就是它的内容

<?php 

namespace App\Observers;

class ModelSignature {

    protected $userID;

    public function __construct(){
        $this->userID =  Auth::id();
    }


    public function updating($model)
    {
        $model->modified_by = $this->userID;
    }


    public function creating($model)
    {
        $model->created_by = $this->userID;
    }


    public function removing($model)
    {
        $model->purged_by = $this->userID;
    }

}

然后我创建了一个名为“RecordSignature”的新特征,位于app\Traits\RecordSignature.php并包含以下代码

<?php

namespace App\Traits;

use app\Observers\ModelSignature;

trait RecordSignature
{

    public static function bootObservantTrait()
    {
        static::observe(new ModelSignature() );
    }
}

最后,在位于“app\Models\Account.php”的“Account”模型中,我像这样使用它

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use App\Models\industry;
use App\Traits\RecordSignature;
use App\Traits\TrimScalarValues;


class Account extends Model
{
    use RecordSignature, TrimScalarValues;
    /**
     * The database table used by the model.
     *
     * @var string
    */
    protected $table = 'accounts';

    protected $primaryKey = 'account_id';

    const CREATED_AT = 'created_on';

    const UPDATED_AT = 'modified_on';

    const REMOVED_AT = 'purged_on';


    /**
     * The attributes that are mass assignable.
     *
     * @var array
    */
    protected $fillable = ['client_id','account_name', 'company_code', 'legal_name', 'created_by','modified_by','instrucations'];

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
    */
    //protected $hidden = ['account_id', 'remember_token'];


    protected $guarded = ['account_id'];

    /**
     * Get the industry record associated with the account.
    */
    public function industry()
    {
        return $this->hasOne(industry, industry::primaryKey);
    }

    public function pk(){

        return $this->primaryKey;
    }

}

问题在于方法updating(), removing() and creating()未按预期填充 userId。似乎这些字段被忽略了或者这些方法没有被触发!

我在这里做错了什么?


您应该能够摆脱 ModelSignatures 类并将您的特征更改为:

trait RecordSignature
{
    protected static function boot()
    {
        parent::boot();

        static::updating(function ($model) {

            $model->modified_by = \Auth::User()->id;
        });

        static::creating(function ($model) {

            $model->created_by = \Auth::User()->id;
        });
        //etc

    }

}

Update:

现在有很多软件包可以为您处理此类事情。我目前经常使用的一个是Laravel 审计 http://www.laravel-auditing.com/它不仅会跟踪谁执行了任务,还会跟踪行的任何更改。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 laravel 5.1 使用更新记录的 user_id 填充 modded_by ? 的相关文章

随机推荐

  • 是否有适用于 Python 3.x 的 Google 数据 API (gdata)?

    我想用谷歌数据API http code google com p gdata python client 但我使用的是Python 3 我没有看到他们提到任何有关Python 3的内容 是否可以为Python 3安装gdata 还没有 但
  • 如何在Azure DevOps Pipeline中编写if else条件

    我有一个天蓝色的管道并使用参数运行 其中有多个选项 如下所示 选择测试执行 Product 产品与成本 带附件的产品 如果我选择Product然后我执行product js文件 如果我选择Product with Cost然后执行 prod
  • C++ const char* 和 const char[] 之间的区别

    我读到一个关于以下之间区别的问题 const char and const char 有一段时间 我认为数组只是指针的语法糖 但有些事情困扰着我 我有一段类似于以下内容的代码 namespace SomeNamespace const ch
  • 当用户单击 Qt 应用程序中的任务栏/停靠栏图标时获取事件或通知

    我正在 osx windows linux 上开发应用程序 我想制作像 Skype 这样的功能 当用户单击关闭窗口时 应用程序不会退出而是隐藏 当用户单击扩展坞或任务栏上的应用程序图标时 我的主窗口将再次重新打开 当用户单击应用程序图标时
  • Java BufferedWriter 关闭()

    假设我有以下代码片段 operation1 bw close operation2 当我打电话时BufferedReader close 从我的代码中 我假设我的 JVM 进行了一个系统调用 以确保缓冲区已被刷新并写入磁盘 我想知道是否cl
  • 如果 Python 是解释型的,那么 .pyc 文件是什么?

    Python 是一种解释型语言 但为什么我的源目录包含 pyc文件 Windows 将其识别为 编译的 Python 文件 我已经明白了 Python 是一种解释型语言 这种流行的模因是不正确的 或者更确切地说 是建立在对 自然 语言水平的
  • Prisma - 如何将两个字段指向同一模型?

    我很难概念化如何处理这个问题 我仔细研究了 Prisma 文档和其他 SO 问题 但它们似乎都与这种情况略有不同 我有两个模型 model User id Int id default autoincrement firstName Str
  • 如何对 Jackson JsonSerializer 和 JsonDeserializer 进行单元测试

    我为我的应用程序编写了自定义 JsonSerializer 和 JsonDeserializer 现在我想为它们编写一些单元测试 一个干净的测试用例应该是什么样的 有一些干净的例子吗 干净意味着不依赖其他框架或库 Json序列化器 该示例正
  • AppendTargetFrameworkToOutputPath 在 .targets 文件中失败

    我正在尝试集中许多项目的一些构建配置 而 MSBuild 解决方案是使用 targets files https learn microsoft com en us visualstudio msbuild msbuild dot targ
  • 在 django 中通过拖放对项目进行排序

    在我的 django 项目中 我在模板中显示了书籍列表 Book型号有position我用来对书籍进行排序的字段 我试图通过拖放列表项对该列表进行排序 但我的下一个代码不能很好地工作 我用jQuery 用户界面 它在前端工作 但当用户拖放列
  • 将文本区域保存到文件

    是否可以将文本区域保存到文件中 FileWriter fw new FileWriter file1 getAbsoluteFile true BufferedWriter bw new BufferedWriter fw bw write
  • 来自一组键的 PHP 数组

    发现这篇文章对我有帮助 拆分字符串以形成多维数组键 https stackoverflow com questions 10519108 split a string to form multidimensional array keys
  • 给定一个字符串,找到元音和辅音数量相同的最长子串?

    给定一个字符串 找到元音和辅音数量相同的最长子串 澄清 我不确定我们是否可以生成一个新字符串 或者子字符串必须是原始字符串的一部分 到目前为止我有这个 代码片段 Scanner scanner new Scanner System in S
  • R 的丰富 Ctags

    是否有任何使用记录ctags http ctags sourceforge net 与 R 这有用吗 实施起来会不会很困难 具体来说 我刚刚开始使用 Vim 如果能够在一个文件中编写 R 函数 在另一个文件 例如 Rnw 文件 测试文件或其
  • 为什么 PayPal 的 IPN 模拟器不能使用 https 地址?

    在 PayPal 的 IPN 模拟器中 如果我输入 https URL 则会收到一条错误消息 很抱歉 我们无法发送 IPN 但是 在 http URL 上它工作正常 我该如何解决这个错误 这可能是因为您的 SSL 证书是自签名的或被 Pay
  • Java Calendar.DAY_OF_WEEK 给出了错误的日期

    下面的代码有什么问题 对于一年中的任何日期 它给出的日期都是错误的 import java util Scanner import java util Calendar public class Solution public static
  • 请求在 chrome 中偶尔会停滞很长时间

    Ajax 请求有时会在 Chrome 中长时间停滞 我终于成功地复制了它并保存了所有必要的相关数据 如果有人可以帮助我的话 可以在这里发布 The timeline from Chrome Dev Tool shows the reques
  • JavaScript ArrayBuffer 切片在 Safari 9.1.2 中明显损坏

    Safari 9 1 2 10601 7 7 中的基本 JavaScript 功能似乎被破坏 也许我只是做错了什么 正在寻求有关如何度过这一切的建议 有问题的函数是ArrayBuffer prototype slice https deve
  • llvm/clang 编译错误,内存耗尽

    我正在尝试在我的 ubuntu 14 04 虚拟机 具有 2GB 内存 上构建最新的 llvm clang 代码 我所做的是正常的配置 制作过程 这两个命令没有任何参数 最后 我有以下错误 llvm 4 链接 Debug Asserts 可
  • 如何使用 laravel 5.1 使用更新记录的 user_id 填充 modded_by ?

    使用 Laravel 5 1 时 我尝试创建一个观察者 它将自动更新以下 3 列 created by 当创建的记录 不再更新 时填充 Modified by 每次修改记录时填充新值 purged by 软删除记录时填充一个值 我知道 El