라라벨:업데이트 시 열이 변경되었는지 관찰자에게 확인
사용자가 업데이트되었는지 확인하기 위해 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()) ?
}
}
편집: https://stackoverflow.com/a/54307753/2311074 에 대한 크레딧 제공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
, https://stackoverflow.com/a/49350664/2311074 를 참조하십시오.
데이터베이스에서 사용자를 다시 가져올 필요는 없습니다.다음이 작동해야 합니다.
public function updating(User $user)
{
if($user->isDirty('email')){
// email has changed
$new_email = $user->email;
$old_email = $user->getOriginal('email');
}
}
사용하는 대신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
이메일 필드가 업데이트되었는지 여부를 확인합니다.
파티에 조금 늦었지만, 비슷한 솔루션을 찾고 있는 미래의 개발자들에게 도움이 될 수도 있습니다.
Laravel Attribute Observer 패키지를 사용하여 서비스 공급자를 오염시키거나 Observer를 다음으로 채울 것을 권장합니다.isDirty()
그리고.wasChanged()
보일러판
따라서 사용 사례는 다음과 같습니다.
class UserObserver
{
/**
* Handle changes to the "email" field of User on "updating" events.
*
* @param \App\User $user
* @param string $newValue The current value of the field
* @param string $oldValue The previous value of the field
* @return void
*/
public function onEmailUpdating(User $user, string $newValue, string $oldValue)
{
// Your logic goes here...
}
}
Laravel Attribute Observer는 하나 이상의 모형에서 관찰해야 할 특성이 많은 경우 특히 유용합니다.
면책 사항:저는 라라벨 속성 관찰자의 저자입니다.개발 시간이 조금이라도 절약된다면 커피를 사주는 것도 고려해보세요.
언급URL : https://stackoverflow.com/questions/48793257/laravel-check-with-observer-if-column-was-changed-on-update
'programing' 카테고리의 다른 글
C# 문자열 값을 이스케이프된 문자열 리터럴로 변환할 수 있습니까? (0) | 2023.09.20 |
---|---|
빈 문자열을 허용하는 PowerShell Function Parameters의 유효성을 검사하는 방법은 무엇입니까? (0) | 2023.09.20 |
도커 네트워킹 - nginx: [emerg] 호스트가 업스트림에서 찾을 수 없음 (0) | 2023.09.20 |
WooCommerce의 My Accounts 페이지에 제품명 및 구매 노트 표시 (0) | 2023.09.20 |
필드가 null이면 특정 필드를 당기고, 그렇지 않으면 다른 필드를 당깁니다. (0) | 2023.09.15 |