【问题标题】:Why Laravel accessor fires on insert?为什么 Laravel 访问器在插入时触发?
【发布时间】:2020-03-29 14:16:31
【问题描述】:

我不确定它们是如何工作的,我在想当你访问属性时访问器会触发,但是当我尝试插入新记录时我的访问器会触发。我通过删除 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 中提取名称的函数):
图片名称.jpg

当我检查日志时,我收到消息:

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

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

【问题讨论】:

    标签: laravel accessor


    【解决方案1】:

    我确实解决了问题,我错过了检查。实际上在我的数据库中插入的记录是正确的:

    image-name.jpg
    

    但我在插入后检查dd() 输出,并且那里的值不正确:

    img/no-image.png
    

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

    【讨论】:

      猜你喜欢
      • 2012-06-06
      • 1970-01-01
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      • 2012-08-09
      • 2012-06-15
      • 2010-11-18
      • 2014-06-02
      相关资源
      最近更新 更多