Мне нужна модель Eloquent для представления документа, загруженного на сервер. Одним из таких полей является абсолютный путь к файлу. Я хочу иметь возможность перемещать файл всякий раз, когда запись базы данных обновляется. Я видел, что Laravel включает в себя Наблюдатели обрабатывать такие события. Проблема в:
Классы наблюдателей имеют имена методов, которые отражают события Eloquent, которые вы хотите прослушивать. Каждый из этих методов получает модель в качестве единственного аргумента.
Это означает, что, к сожалению, с данной системой я не могу фактически переместить файл, так как у меня не будет способа извлечь как текущее, так и новое местоположение рассматриваемого файла. Есть ли другой способ определения изменения значения при доступе к старым и новым значениям?
Похоже, вы можете использовать updating
модельное событие за это. Вы можете зарегистрировать событие в boot
метод поставщика услуг (например, app/Providers/AppServiceProvider.php
) или путем создания класса наблюдателя, как вы упомянули.
isDirty
а также getOriginal
методы должны помочь вам проверить, нужно ли перемещать файл, а затем получить его исходный путь.
Например:
use Storage;
use App\Document;
public function boot()
{
Document::updating(function ($document) {
if ($document->isDirty('file_path')) {
// File needs to be moved
$current_path = $document->getOriginal('file_path');
$new_path = $document->file_path;
Storage::move($current_path, $new_path);
}
});
}
Смотрите также: Обновление Laravel eloquent: получение данных
Других решений пока нет …