取得したEloquentモデルに変更があったかを判定したいとき、どのときにどっちを使えばいいかよく忘れてしまうのでメモ
最初に結論
- DBに反映する前 -
isDirty
- DBに反映した後 -
wasChanged
isDirty
Eloquentモデルが取得されてから値を変更したとき、DBに反映する前まではtrueを返し、DBに反映された後はfalseを返す
DBに反映する前まではtrue.php
use App\Models\User;
$user = User::create([
'first_name' => 'Taylor',
'last_name' => 'Otwell',
'title' => 'Developer',
]);
$user->title = 'Painter';
$user->isDirty(); // titleの値が変わっているのでtrue
$user->save(); // ここでDBに保存
$user->isDirty(); // 以降はfalseを返す
wasChanged
Eloquentモデルが取得されてから値を変更したとき、DBに反映する前まではfalseを返し、DBに反映された後はtrueを返す
DBに反映された後からtrue.php
use App\Models\User;
$user = User::create([
'first_name' => 'Taylor',
'last_name' => 'Otwell',
'title' => 'Developer',
]);
$user->title = 'Painter';
$user->wasChanged(); // まだDBに反映していないのでfalse
$user->save(); // ここでDBに保存
$user->wasChanged(); // 保存したのでtrueを返すようになる
参考