Laravelでデータ更新時に差分を確認するisDirty()とgetDirty()
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"] ない場合は...