Laravelでデータ更新時に差分を確認するisDirty()とgetDirty()

laravel-isdirty-getdirtyテクノロジー

Laravelで既に登録されているデータ更新する際に、Eloquentsave()を利用することがあると思いますが、データ更新されていない、例えば更新画面で何も入力せずにフォームボタンを押した場合、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"]

ない場合は配列を返します。

[]

これを利用すると、どのフィールドがどう更新されるを確認することができます。

東京生まれ福岡育ちの文系プログラマー。
テクノロジーの恩恵を感じながら日々精進しています。
広く浅くをモットーに、最近ではプログラミングだけでなく、仮想サーバーからセキュリティ、監視システムなども勉強中です。

管理者をフォローする

コメント

タイトルとURLをコピーしました