为什么 Laravel 访问器在插入时触发?
Why Laravel accessor fires on insert?
我不确定它们是如何工作的,我以为当您访问该属性时访问器会触发,但是当我尝试插入新记录时我的访问器会触发。我通过删除 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;
}
Image.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 中提取名称的函数):
图片-name.jpg
当我查看日志时,我收到消息:
getImageNameAttribute: https://some-random-image-url/image-name.jpg
如果我做错了什么或者这是假装的,有人可以向我解释吗?
我确实解决了问题,我错过了检查。实际上在我的数据库中插入的记录是正确的:
image-name.jpg
但我正在检查 dd()
插入后的输出,并且那里的值不正确:
img/no-image.png
因为当 dd()
触发时,访问器也被触发(因为我们正在检索数据)并且由于图像未下载,它实际上显示了正确的数据。
我不确定它们是如何工作的,我以为当您访问该属性时访问器会触发,但是当我尝试插入新记录时我的访问器会触发。我通过删除 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;
}
Image.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 中提取名称的函数):
图片-name.jpg
当我查看日志时,我收到消息:
getImageNameAttribute: https://some-random-image-url/image-name.jpg
如果我做错了什么或者这是假装的,有人可以向我解释吗?
我确实解决了问题,我错过了检查。实际上在我的数据库中插入的记录是正确的:
image-name.jpg
但我正在检查 dd()
插入后的输出,并且那里的值不正确:
img/no-image.png
因为当 dd()
触发时,访问器也被触发(因为我们正在检索数据)并且由于图像未下载,它实际上显示了正确的数据。