Есть разница да.
Код, связанный с этим: https://github.com/laravel/framework/blob/6.x/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php#L1060
isDirty код
/**
* Determine if the model or any of the given attribute(s) have been modified.
*
* @param array|string|null $attributes
* @return bool
*/
public function isDirty($attributes = null)
{
return $this->hasChanges(
$this->getDirty(), is_array($attributes) ? $attributes : func_get_args()
);
}
getChanges () & getDirty code
/**
* Get the attributes that have been changed since last sync.
*
* @return array
*/
public function getDirty()
{
$dirty = [];
foreach ($this->getAttributes() as $key => $value) {
if (! $this->originalIsEquivalent($key, $value)) {
$dirty[$key] = $value;
}
}
return $dirty;
}
/**
* Get the attributes that were changed.
*
* @return array
*/
public function getChanges()
{
return $this->changes;
}
Подводя итог.
Ответ, использованный в этом сообщении: https://laracasts.com/discuss/channels/eloquent/observer-column-update-isdirty-or-waschanged
isDirty (и getDirty) используется ПЕРЕД сохранением, чтобы увидеть, какие атрибуты были изменены между временем, когда он был получен из базы данных. и время вызова, когда wasChanged (и getChanges) используется ПОСЛЕ сохранения, чтобы увидеть, что атрибуты были изменены / обновлены при последнем сохранении (из кода в базу данных).
Причина, по которой выполучить в проверке isDirty является то, что перед проверкой вы делаете fill (). Я думаю, что это будет автоматическое заполнение updated_at. Так что, по сути, модель, в данном случае, была изменена.