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')) {
    // ...
}