24歳初心者です。
フォーム入力画面でユーザーが特に項目を変更しないまま、保存ボタンを押しちゃった場合
、「サーバーサイドでどのようにそれを検知すればよいのか」ということを調べていたらisDirtyメソッドに辿り着きました。
##isDirtyメソッドとは何か?
→Eloquentモデルをデータベースで照会して編集されたかどうかを調べる事が出来る。
Model::originalという連想配列の中には「編集前の」データを持っていています。
Model::attributesには「現在保持している」データがあります。
isDirtyメソッドはこの2つのデータを比べて一致しなければ真を返します。
##実用例
$change = Change::findOrFail($id);
$other_model = OtherModel::findOrFail($id);
$change->tall = 160
//値の更新
if($change->isDirty())
{
$change->update();
$other_model->update();
}
上記は$changeの更新で他のDBのレコードを更新するか否かを判断する場合の書き方です。
isDirty()メソッドの処理をupdate()メソッドよりも上に記載することによってDBにレコードが保存される前にチェックする事が出来ます。
ただisDirtyメソッドはCollectionなど配列で返ってくるものに対しては機能しないので、foreachなどで一個ずつ取り出す処理をしてあげないといけません。
参考URL
http://www.larajapan.com/category/eloquent%E3%82%92%E3%82%88%E3%81%8F%E7%9F%A5%E3%82%8B/
https://stackoverflow.com/questions/28836013/what-does-isdirty-means-in-laravel