2017-11-05 113 views
1

Eloquent save methodが行が実際に変更されたかどうかを確認する簡単な方法はありますか? Eloquentのための何かaffected_rowsのようなもの?Laravel:モデルが変更されたかどうかを確認する方法

私がやってLaravel Eloquent update just if changes have been madeからだった唯一の回避策:

$user = Auth::user(); 

$timestamp = $user->updated_at; 

$user->title = $request->input('title'); 
.... 

$user->save(); 

if($timestamp == $user->updated_at){ 
    // row was not updated. 
} 

しかし、これは$timestep変数を必要とチェックせずに、短く、これを知ることができますか?私はすべてのコントローラでそのロジックを繰り返すことは望まない。

私はこのような何かを探しています:

$user = Auth::user(); 

$user->title = $request->input('title'); 
.... 

if($user->save()){ 
    // row was updated. 
} 

しかし、これは$user->save戻り、両方のケースでtrueので、動作しません。別の方法がありますか?

答えて

3

まず第一に代わりの:

$user->save 

あなたではなく使用する必要があります。

$user->save(); 

、何があなたが使用することができ、最新のLaravelの変化したかどうかを確認するには:

if ($user->wasChanged()) { 
    // do something 
} 

しかし、これが私がララベルで覚えている限りであることに気をつけてください。

+0

ありがとうございました。私はそれを試して、それは動作します。 '$ user-> wasChanged()'の前に '$ user-> save()'を呼び出さなければなりません。 – Adam

+1

@Adamはい、通常は '$ user-> save()'を実行し、 '$ user-> wasChanged()'を実行して、変更されたかどうかを確認できます。変更された内容を確認したい場合は、 'getChanges()'メソッドもあります。 –

0

代わりに、あなたはまた、完全に保存し、お使いのモデルが->isDirty()かどうかを確認し、前にスキップ可能性が...これはあなたに影響を受けた行数が表示されます

$user = Auth::user(); 
$userUpdated = $user->update($request->all()); 

//Print number of updated rows... 
print($userUpdated); 

...レコードを更新する

1

update()を使用->save()を呼び出してください。

// ... 
$user->title = $request->input('title'); 

if ($user->isDirty()) { 
    $user->save(); 
} 

isDirty()のほかに、あなたもisClean()、および多くを持っています。

チェックアウト:HasAttributes trait

関連する問題