Laravelで既に登録されているデータを更新する際に、Eloquentのsave()
を利用することがあると思いますが、データが更新されていない、例えば更新画面で何も入力せずにフォームボタンを押した場合、update()
とは違ってデータを更新することはありません。
つまり、save()
の中では既存データと更新データの差分を見て更新しています。
その差分を意図的に確認したい場合に、isDirty()
やgetDirty()
関数を利用ます。
isDirty()で更新データを確認
データベースに登録する前に、isDirty()
でデータが更新されたかどうか確認できます。
データ全体を判定
1つでも更新されるデータが存在するかを調べる場合は以下のように記述します。
$model->isDirty();
更新するデータが1つでもあればtrue
、1つも無ければfalse
を返します。
キーを指定して個別に判定
また、フィールド名を指定してデータが更新されているかどうかも確認できます。
$model->isDirty("name");
name
の値が更新されていればtrue
、更新前と同じ値ならfalse
を返します。
さらに、キーを配列で指定することで、複数同時に調べることもできます。
$model->isDirty(["name", "email", "tel"]);
ただし、判定結果がそれぞれ配列で返ってくるわけではなく、全体を見て1つでも更新データがあればtrue
、1つも無ければfalse
を返します。
getDirty()で更新データを取得
更新されたデータを取得したい場合は、getDirty()
を利用します。
使い方は簡単です。
$dirty = $model->getDirty();
更新データがある場合は配列で返します。
["name" => "update name"]
ない場合は空の配列を返します。
[]
これを利用すると、どのフィールドの値がどう更新されるを確認することができます。
- Original:https://minory.org/laravel-isdirty-getdirty.html
- Source:Minory
- Author:管理者