Laravel Eloquent created_at wird aktualisiert

8

Ich habe gerade einen Haken mit den Standard-Zeitstempeln von Eloquent (Laravel 5.2.10) gesetzt. Standardmäßig liefert die $table->timestamps() -Methode eine created_at - und eine updated_at -Spalte in Ihrer Tabelle, die entsprechend aktualisiert werden.

Als ich jedoch einige Testeinträge versuchte, bemerkte ich, dass das updated_at -Feld aktualisiert wird, wenn es aktualisiert wird, aber das created_at -Feld auch wird aktualisiert : Die Stunden bleiben zur erstellten Zeit, aber die Minuten und Sekunden werden aktualisiert, damit sie dem Feld updated_at entsprechen.

Wenn das zu wortreich war, hier ein Beispiel:

%Vor%

Beachten Sie, dass die Minuten und Sekunden für das Feld created_at und updated_at identisch sind.

Ich habe versucht, durch die Model -Klasse zu sehen, wo die Zeitstempel gesetzt sind, aber es stellt sich heraus, dass die Methode setCreatedAt() tatsächlich nicht aufgerufen wird, wenn nur ein Datensatz aktualisiert wird.

Warum passiert das?
Wie verhindere ich, dass sich das created_at -Feld ändert? (wichtiger)

    
tam5 13.01.2016, 22:45
quelle

1 Antwort

5

Ihr Problem hängt wahrscheinlich mit diesem Problem zusammen: Ссылка

Lange Rede, kurzer Sinn, die Spalte created_at vieler Leute hat das Attribut ON UPDATE CURRENT_TIMESTAMP .

Wie auf der Github-Seite angegeben:

  

MySQL 5.7 erlaubt es nicht mehr, das Modell als gültigen Zeitstempel zu verwenden   strikter Modus aktiviert (was standardmäßig der Fall ist). Also entweder benutzen    ->nullableTimestamps() oder ->timestamp()->useCurrent() .

Sie können das beheben, indem Sie Folgendes ändern:

%Vor%

Zu einer dieser Optionen:

%Vor%

Auch auf dieser MySQL-Seite: Ссылка

  

Wenn explicit_defaults_for_timestamp deaktiviert ist (Standardeinstellung), führen Sie alternativ einen der folgenden Schritte aus:

     

Definieren Sie die Spalte mit einer DEFAULT-Klausel, die einen konstanten Standardwert angibt.

     

Geben Sie das NULL-Attribut an. Dies führt auch dazu, dass die Spalte NULL-Werte zulässt, was bedeutet, dass Sie den aktuellen Zeitstempel nicht zuweisen können, indem Sie die Spalte auf NULL setzen. Wenn NULL zugewiesen wird, wird die Spalte auf NULL gesetzt.

    
Thomas Kim 13.01.2016, 22:50
quelle