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"]

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

[]

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

参考サイト

Intro I’ve done a quick test to exercise a new-to-me part of the Laravel (5.6) Eloquent API: $model->isDirty(); $model->isDirty(“field_name”); $model->isDirty([“fie…
Laravel/eloquent isDirty() & getDirty() - Almost All Digital



コメント

このブログの人気の投稿

Linuxでファイルの改行コードLF⇔CRLFを変換する方法

RHEL 7でスタティック(静的)ルートを追加する4つの方法

UTF-8のBOM付きとBOMなしを変換する方法(Linux)