为什么Laravel访问器在插入时启动



我不确定它们是如何工作的,我认为访问器在访问属性时会触发,但当我尝试插入新记录时,我的访问器会触发。我通过删除URL仅在数据库中存储image_name,并且在检索图像名称时使用访问器包含URL路由。我发现我的访问者在插入时触发并更改我的输入:

ImageRepository.php

public function save($imageData)
{
$this->model->owner()->associate(auth()->user());
$this->model->type       = $imageData->type;
$this->model->image_name = $imageData->image_url;
$this->model->save();
return $this->model;
}

图片.php

public function getImageNameAttribute($value)
{
$filePath = 'my_path';
// check if method was hit
logger()->info('getImageNameAttribute: '.$value);
// return default image if not found
if ($value == '' || $value == null || Str::contains($value, 'no-image.png') || !File::exists(public_path($filePath))) {
return asset('img/no-image.png');
} else {
return asset($filePath);
}
}

$imageData->image_url的输入:
https://some-random-image-url/image-name.jpg

插入的数据:
img/no-image.png

异常输出(我有一个从URL中提取名称的函数(:
image-name.jpg

当我查看日志时,我得到消息:

getImageNameAttribute:https://some-random-image-url/image-name.jpg

如果我做错了什么,或者这是假装的,有人能向我解释吗?

我确实解决了问题,但我没有检查。事实上,在我的数据库中插入的记录是正确的:

image-name.jpg

但我在插入后检查dd()输出,其中的值不正确:

img/no-image.png

因为当dd()触发时,访问器也会被触发(因为我们正在检索数据(,并且由于图像没有下载,它实际上显示了正确的数据。

最新更新