¿Qué significa isDirty() en Laravel?

3 minutos de lectura

avatar de usuario de shay.k
shay.k

En primer lugar, no estoy muy familiarizado con Laravel (o con el término “sucio” para el caso).
Me topé con esta línea de código:

if ($this->isDirty('status')) {
    if (Notification::has('website-status-' . strtolower($this->status))) {
        Notification::set($this->account, 'website-status-' . strtolower($this->status), $this->emailAttributes())
            ->email();
    }
}

Y no podía entender lo que eso significa exactamente. Intenté averiguarlo en Internet, pero el sitio de Laravel solo dice esto

“Determinar si un atributo dado está sucio”

que en realidad no ayuda…

  • stackoverflow.com/questions/18498518/… “Si desea saber si el modelo se modificó desde que se tomó de la base de datos, o si simplemente no se guardó (es decir, si es necesario guardarlo), puede usar ->isDirty( ) función”

    – ka_lin

    03/03/2015 a las 15:50

  • Cuando se obtiene un registro de la base de datos, está “limpio”. Después de modificarlo, se vuelve ‘sucio’. Una vez que lo guarda de nuevo en la base de datos, vuelve a estar “limpio”.

    –Jeff Lambert

    3 de marzo de 2015 a las 16:09


Cuando desee saber si el modelo ha sido editado desde que se consultó desde la base de datos, o si no se guardó en absoluto, utilice el ->isDirty() función.

  • solo copiaste/pegaste ka_lins comentar casi palabra por palabra sin reconocimiento?

    – Adán

    21 de septiembre de 2018 a las 6:55

  • @Adam no tiene que hacerlo, lee esto

    – Salim Djerbouh

    22/09/2019 a las 19:34

  • prntscr.com/r7sxgq Alguna idea de que este método me devuelva VERDADERO, pero creo que no cambia ningún valor único.

    – M Amir Shahzad

    26 de febrero de 2020 a las 8:12

  • @MAmirShahzad, ¿qué devuelve cuando llama a ->getChanges()? Obtuve un comportamiento extraño al guardar valores decimales (8,2) en la base de datos. (tipo de detección de conversión como cambios). Para resolver esto uso number_format($variable, 2, ‘.’, ”)

    –Tomir Schmite Jr.

    22 oct a las 19:26

El método isDirty determina si se ha cambiado algún atributo desde que se cargó el modelo. Puede pasar un nombre de atributo específico para determinar si un atributo en particular está sucio.

    $user = User::create([
        'first_name' => 'Amir',
        'last_name' => 'Kaftari',
        'title' => 'Developer',
    ]);

    $user->title="Jafar";
    $user->isDirty(); // true
    $user->isDirty('title'); // true
    $user->isDirty('first_name'); // false

Avatar de usuario de Muslim Deris
Deris musulmán

Eloquent proporciona la isDirty, isCleany wasChanged métodos para examinar el estado interno de su modelo y determinar cómo han cambiado sus atributos desde que se cargaron originalmente.

Puede encontrar una descripción completa y ejemplos de estos tres métodos aquí en el documento oficial:
https://laravel.com/docs/9.x/eloquent#examining-attribute-changes

  • Esta es la única respuesta que apunta a la documentación oficial. Debe seleccionarse como respuesta aceptada.

    – alvaro.canepa

    30 de enero de 2021 a las 12:50

avatar de usuario de kapitan
capitán

Como apoyo a la respuesta aceptada:

$model = Model::find(1);

$model->first_column = $request->first_value;
$model->second_column = $request->second_value;
$model->third_column = $request->third_value;

if($model->isDirty()){
// the model has been edited, else codes here will not be executed
}

$model->save();

¿Ha sido útil esta solución?