阅读源码找到获取old_value
和new_value
的地方
protected function getUpdatedEventAttributes(): array
{
$old = [];
$new = [];
foreach ($this->getDirty() as $attribute => $value) {
if ($this->isAttributeAuditable($attribute)) {
$old[$attribute] = Arr::get($this->original, $attribute);
$new[$attribute] = Arr::get($this->attributes, $attribute);
}
}
return [
$old,
$new,
];
}
直接看$new[$attribute] = Arr::get($this->attributes, $attribute);
这一行
其实不算是个bug吧,阅读laravel的源码你可以知道在数据里有引号斜杆之类的字符串时laravel取的时候会自动转义
$this->attributes 取出来的值已经被转义
所以只需要改一下 $this->attributes 让它不转义就行
改的方法有很多种 最简单的是用 $this->toArray() 替换 $this->attributes
知道原理后所以自己实现一个getUpdatedEventAttributes
方法就行
/**
* 处理 OwenIt\Auditing 转义的问题
*
* @return array
*/
protected function getUpdatedEventAttributes(): array
{
$old = [];
$new = [];
foreach ($this->getDirty() as $attribute => $value) {
if ($this->isAttributeAuditable($attribute)) {
$old[$attribute] = Arr::get($this->original, $attribute);
$new[$attribute] = Arr::get($this->toArray(), $attribute);
}
}
return [
$old,
$new,
];
}