Laravel审核-如何使用雄辩的模型方法获取特定的列

时间:2018-10-25 18:06:32

标签: laravel eloquent audit-trail laravel-auditing

我正在使用Laravel审核程序包来跟踪模型上的更改。 我想在审计表中记录事件(创建,更新,删除)之前,在主表中获取外键的特定列。

该软件包有一种帮助获取外键的所有属性的方法,称为审计转换,但是当我在表格中显示详细信息时,我想知道是否有雄辩的模型方法来获取该错误,这对我来说会产生错误我需要的特定列信息,而不是使用 getattribute() 的整个行的 item_id 方法。

审核转换方法

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"}}

这是Item表架构 Item Schema

因此,在我的情况下,我想将 item_name 存储为 Toner ,而不是 {{ 1}} 任何建议都将受到欢迎,谢谢。

1 个答案:

答案 0 :(得分:1)

在“查找”功能之后添加->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;
}