Laravel - 监测记录变化

时间:2017-01-18 21:45:22

标签: php laravel laravel-5.3

我需要一个Eloquent模型来表示上传到服务器的文档。一个这样的字段是文件的绝对路径。我希望能够在更新数据库记录时移动文件。我已经看到Laravel包含Observers来处理此类事件。问题是:

  

观察者类具有反映您希望侦听的Eloquent事件的方法名称。这些方法中的每一个都将模型作为唯一的参数。

这意味着,遗憾的是,对于给定的系统,我无法实际移动文件,因为我无法检索相关文件的当前位置和新位置。是否有另一种方法可以在访问旧值和新值时检测值何时发生变化?

1 个答案:

答案 0 :(得分:4)

听起来您可以使用updating model event来实现此目的。您可以在服务提供商的boot方法中注册该事件(例如app/Providers/AppServiceProvider.php),也可以按照您的提法创建一个观察者类。

isDirtygetOriginal方法可以帮助您检查文件是否需要移动,然后获取原始路径。

例如:

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