2017-01-18 4 views
0

Мне нужна модель Eloquent для представления документа, загруженного на сервер. Одним из таких полей является абсолютный путь к файлу. Я хочу, чтобы иметь возможность перемещать файл всякий раз, когда запись базы данных обновляется. Я видел, что Laravel включает в себя Observers для обработки таких событий. Проблема заключается в следующем:Laravel - Изменение записи мониторинга

Классы наблюдателей имеют имена методов, которые отражают события Красноречивости, которые вы хотите прослушать. Каждый из этих методов получает модель в качестве единственного аргумента.

Это означает, что, к сожалению, с данной системой я не могу на самом деле переместить файл, так как у меня не будет способа получить как текущее, так и новое местоположение файла. Есть ли другой способ определения, когда значение изменяется при наличии доступа к старым и новым значениям?

ответ

4

Похоже, что вы можете использовать updatingmodel event. Вы можете зарегистрировать событие в методе 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 updating eloquent event: getting the data

Смежные вопросы