Laravel 审计 - 如何使用 Eloquent 模型方法获取特定列

Laravel Auditing - How To Get Specific Column Using Eloquent Model Method

我正在使用 Laravel 审计包来跟踪我的模型的变化。 在审计 table.

中记录事件(创建、更新、删除)之前,我想在主 table 中获取外键的特定列

包有一种方法可以帮助获取外键的所有属性,它被称为审计转换,但它在 table 中显示详细信息时为我生成错误我想知道是否有任何eloquent 模型方法来获取我需要的特定列信息,而不是使用 getattribute() 方法获取 [=15= 的整行].

审计转换方法

public function transformAudit(array $data): array
{

    if (Arr::has($data, 'new_values.item_id')) {
        $data['old_values']['item_name'] = Item::find($this->getOriginal('item_id'));
        $data['new_values']['item_name'] = Item::find($this->getAttribute('item_id'));
    }

    return $data;
}

这是它在数据库中的存储方式 item_name

{"item_id":"1","qty_received":"2","delivered_by":"John",
"received_by":"Abi","supplier":"Stores","date":"2019-11-26","item_name":{"item_id":1,"item_name":"Toner","colour":"Black","status":"Active",
"created_at":"2018-10-25 17:55:26","updated_at":"2018-10-25 17:55:26"}}

这是项目 table 架构

所以在我的场景中,我想将 item_name 存储为 Toner 而不是整个item_id 行 欢迎任何建议,提前致谢。

在查找功能后添加->item_name->item_name

 if (Arr::has($data, 'new_values.item_id')) {
    $data['old_values']['item_name'] = Item::find($this->getOriginal('item_id'))->item_name->item_name;
    $data['new_values']['item_name'] = Item::find($this->getAttribute('item_id'))->item_name->item_name;
}