Comprobar si un modelo ha sido actualizado en Eloquent
Con el objetivo de reducir queries y llamadas a funciones innecesarias, en Eloquent tenemos dos funciones que nos pueden ayudar.
La primera de ellas nos va a permitir saber si un modelo necesita ser guardado o no (es decir, si ha habido cambios en él):
$product = Product::findOrFail($id);
// make conditional changes
if ($product->isDirty()) {
$product->save();
}
La función isDirty()
nos va a permitir saber si los atributos de un modelo de Eloquent han cambiado desde que se cargó en memoria / se guardó en la base de datos.
La segunda función interesante es wasChanged()
, que nos permitirá saber si un registro fue actualizado en base de datos o no:
$product = Product::findOrFail($id);
// conditionally save the product
if ($product->wasChanged()) {
Mail::to($admin)->send(new ProductUpdated($product));
}
Además, ambas funciones admiten un parámetro de tipo string que comprobaría si un atributo determinado fue actualizado:
if ($product->isDirty('name')) {
// ...
}
if ($product->wasChanged('name')) {
// ...
}