我正在使用Observer来观看用户是否已更新。
每当用户updated
时,我想检查他的email
是否已被更改。
这样的事情可能吗?
class UserObserver
{
/**
* Listen to the User created event.
*
* @param \App\User $user
* @return void
*/
public function updating(User $user)
{
// if($user->hasChangedEmailInThisUpdate()) ?
}
}
答案 0 :(得分:10)
正如tadman
在评论中已经说过,方法isDirty
可以解决问题:
class UserObserver
{
/**
* Listen to the User created event.
*
* @param \App\User $user
* @return void
*/
public function updating(User $user)
{
if($user->isDirty('email')){
// email has changed
$new_email = $user->email;
$old_email = $user->getOriginal('email');
}
}
}
答案 1 :(得分:2)
您不必再次从数据库中获取用户。以下应该起作用:
public function updating(User $user)
{
if($user->isDirty('email')){
// email has changed
$new_email = $user->email;
$old_email = $user->getOriginal('email');
}
}
答案 2 :(得分:0)
您应该使用 updating
模型事件而不是使用 updated
事件来将列更改与原始值进行比较。请看下面的代码。
AppServiceProvider.php
<?php
namespace App\Providers;
use App\Models\User;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
User::updated(function($user){
$changes = array_diff($user->getOriginal(), $user->getAttributes());
if(array_key_exists('email',$changes)){
/* do your things. */
}
});
}
}
说明:
array_key_exists
检查电子邮件字段是否已更新。