Я не уверен, как они работают, я думал, что аксессор срабатывает при доступе к атрибуту, однако при попытке вставить новую запись срабатывает аксессор. Я сохраняю в своей базе данных только имя_изображения, удаляя URL, и использую метод доступа, чтобы включить маршрут 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):
image-name.jpg
Когда я проверяю журнал, я получаю сообщение:
getImageNameAttribute: https://some-random-image-url/image-name.jpg
Может кто-нибудь объяснить мне, если я делаю что-то не так или это работает, как притворно?