Php Laravel:与观察者一起检查列是否在更新时更改
我正在使用监视用户是否已更新 每当用户Php Laravel:与观察者一起检查列是否在更新时更改,php,mysql,laravel-5,Php,Mysql,Laravel 5,我正在使用监视用户是否已更新 每当用户更新时我都想检查他的电子邮件是否已更改 这样的事情可能吗 class UserObserver { /** * Listen to the User created event. * * @param \App\User $user * @return void */ public function updating(User $user) { // if($use
更新时
我都想检查他的电子邮件
是否已更改
这样的事情可能吗
class UserObserver
{
/**
* Listen to the User created event.
*
* @param \App\User $user
* @return void
*/
public function updating(User $user)
{
// if($user->hasChangedEmailInThisUpdate()) ?
}
}
编辑:为getOriginal
正如tadman
在评论中已经说过的那样,isDirty
方法实现了以下目的:
class UserObserver
{
/**
* Listen to the User updating 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');
}
}
}
如果您想知道
isDirty
和wasChanged
之间的区别,请参阅您不必再次从数据库获取用户。以下方面应起作用:
public function updating(User $user)
{
if($user->isDirty('email')){
// email has changed
$new_email = $user->email;
$old_email = $user->getOriginal('email');
}
}
你是说方法?还有
wasChanged
@tadman是的!这就是我要找的。这和观察家是一致的吗?我认为更新是在将更改分配给用户
之后调用的,但在存储之前调用的,对吗?我不是100%确定细节,所以您可能需要在这里进行实验。脏跟踪是许多ORM的一个共同特征,包括雄辩。非常感谢,这就是我正在搜索的内容。无需再次从数据库传输模型,查看我的答案以获取更新版本我对您对已接受答案的评论投了赞成票,但对该评论投了反对票,因为它现在是duplicate@aowie1这个答案在我发表评论后被更新了:'(我对你的答案投了赞成票,因为我认为它不值得投反对票。然而,我认为在这方面的常见做法是根据评论编辑答案的小改进。我想使用getOriginal
而不是find
只是一个小改进,因为两者都起作用,答案的主要部分是如何找到模型。)已更改:这是isDirty
方法。在这种情况下,如果您通过编辑我的问题并更改行来提出请求,可能会更好。这也会给您学分。