Was bedeutet isDirty() in Laravel?

Lesezeit: 3 Minuten

Benutzeravatar von shay.k
shay.k

Zunächst einmal bin ich mit Laravel nicht so vertraut (oder mit dem Begriff “schmutzig” für diese Angelegenheit).
Ich bin über diese Codezeile gestolpert –

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

Und ich konnte nicht verstehen, was das genau bedeutet. Ich habe versucht, es im Internet herauszufinden, aber die Laravel-Site sagt nur dies

“Feststellen, ob ein bestimmtes Attribut unsauber ist”

was nicht wirklich hilft…

  • stackoverflow.com/questions/18498518/… “Wenn Sie wissen möchten, ob das Modell geändert wurde, seit es aus der Datenbank geholt wurde, oder einfach überhaupt nicht gespeichert wurde (auch wenn es gespeichert werden muss), dann können Sie ->isDirty( ) Funktion”

    – ka_lin

    3. März 2015 um 15:50 Uhr

  • Wenn ein Datensatz aus der Datenbank abgerufen wird, ist er „sauber“. Nachdem Sie es geändert haben, wird es “dirty”. Sobald Sie es wieder in der Datenbank speichern, wird es wieder “sauber”.

    – Jeff Lambert

    3. März 2015 um 16:09 Uhr


Wenn Sie wissen möchten, ob das Modell bearbeitet wurde, seit es aus der Datenbank abgefragt wurde, oder überhaupt nicht gespeichert wurde, verwenden Sie die ->isDirty() Funktion.

  • Sie haben nur kopiert/eingefügt ka_lins fast wortwörtlich ohne Bestätigung kommentieren?

    – Adam

    21. September 2018 um 6:55 Uhr

  • @ Adam muss er nicht, lies das

    – Salim Djerbouh

    22. September 2019 um 19:34 Uhr

  • prntscr.com/r7sxgq Irgendeine Idee, dass diese Methode mich TRUE zurückgibt, aber es ändert keinen einzelnen Wert, denke ich.

    – M. Amir Shahzad

    26. Februar 2020 um 8:12 Uhr

  • @MAmirShahzad was gibt zurück wenn du ->getChanges() aufrufst? Ich habe ein seltsames Verhalten beim Speichern von dezimalen (8,2) Werten in der Datenbank. (Typ Casting als Änderungen erkennen). Um dies zu lösen verwende ich number_format($variable, 2, ‘.’, ”)

    – Tomir Schmite jr.

    22. Oktober 2022 um 19:26 Uhr

Die isDirty-Methode bestimmt, ob Attribute geändert wurden, seit das Modell geladen wurde. Sie können einen bestimmten Attributnamen übergeben, um festzustellen, ob ein bestimmtes Attribut unsauber ist.

    $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

Benutzeravatar des Moslems Deris
Moslem Deris

Eloquent bietet die isDirty, isCleanund wasChanged Methoden, um den internen Zustand Ihres Modells zu untersuchen und festzustellen, wie sich seine Attribute seit dem ursprünglichen Laden geändert haben.

Eine vollständige Beschreibung und Beispiele dieser drei Methoden finden Sie hier im offiziellen Dokument:
https://laravel.com/docs/9.x/eloquent#examining-attribute-changes

  • Dies ist die einzige Antwort, die auf eine offizielle Dokumentation hinweist. Muss als akzeptierte Antwort ausgewählt werden.

    – alvaro.canepa

    30. Januar 2021 um 12:50 Uhr

Benutzeravatar von kapitan
Kapitän

Als Unterstützung für die akzeptierte Antwort:

$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();

1440650cookie-checkWas bedeutet isDirty() in Laravel?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy