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