仅在更新模型属性/列时处理事件-Laravel Observer

仅在更新模型属性/列时处理事件-Laravel Observer,laravel,model,eloquent,observers,laravel-events,Laravel,Model,Eloquent,Observers,Laravel Events,我在这里处理模型的两个事件,更新和更新,正如您在下面的代码中看到的。我担心的是,我只想在teacherId已更改的情况下在更新的事件中执行某些任务,因此我想在更新事件中检查该值,并使用类属性来了解该值是否已更改,但该标志始终返回false(假定其已定义的值) namespace App\Observers; class SubjectObserver { private $shouldUpdateThreads = false; /** * Listen to the ThreadLis

我在这里处理模型的两个事件,更新和更新,正如您在下面的代码中看到的。我担心的是,我只想在teacherId已更改的情况下在更新的事件中执行某些任务,因此我想在更新事件中检查该值,并使用类属性来了解该值是否已更改,但该标志始终返回false(假定其已定义的值)

namespace App\Observers;

class SubjectObserver {

private $shouldUpdateThreads = false;

/**
 * Listen to the ThreadList created event.
 * This events Fire when ThreadList is handled
 * @param \App\Observers\App\ThreadList $threadList
 */
public function created(\subject $subject) {

}

/**
 * Listen to the ThreadList saved event.
 * @param \App\Observers\App\ThreadList $threadList
 */
public function saved(\subject $subject) {

}

/**
 * Handling subject updated event 
 * Used to update the threads and related models
 * @param \subject $subject
 */
public function updated(\subject $subject) {
    info('After Update Event ' . $this->shouldUpdateThreads);
    if ($this->shouldUpdateThreads) {
        info_plus($subject);
    }
    info('After Update Check');
}

/**
 * Handling subject being updated event
 * Used to check if the teachers data has changed or not
 * @param \subject $subject
 */
public function updating(\subject $_subject) {

    $subject = \subject::find($_subject->id);

    $this->shouldUpdateThreads = ($subject->teacherId != $_subject->teacherId) ? true : false;

    info(($subject->teacherId != $_subject->teacherId));

    info("Thread update ? " . $this->shouldUpdateThreads);
}

public function deleted(\subject $subject) {
    info("Subject deleted");
}

}

这是正确的方法吗?如果不是,我做错了什么

在雄辩的模型中,更新属性时可以使用
getOriginal
方法。 因此,如果要获取
teacherId
的原始值(更新前),可以执行以下操作:

$subject->getOriginal('teacher_id');

在代码中:

public function updated(\subject $subject) {
    info('After Update Event ' . $this->shouldUpdateThreads);
    if ($subject->getOriginal('teacher_id') !== $subject->teacher_id) {
        info_plus($subject);
    }
    info('After Update Check');
}

酷,让我试试:)那对我来说似乎很好,谢谢