Heim >PHP-Framework >Laravel >8 Tipps zur Verwendung von Laravel-Modell-Zeitstempeln
Standardmäßig verfügt die Standarddatentabelle des Laravel Eloquent-Modells über zwei Felder: „created_at“ und „update_at“. Natürlich können wir viele individuelle Konfigurationen vornehmen und viele interessante Funktionen implementieren. Hier sind einige Beispiele.
1. Zeitstempel deaktivieren
Wenn die Datentabelle diese beiden Felder nicht enthält, wird Model::create($arrayOfValues); beim Speichern der Daten angezeigt SQL-Fehler. Laravel kann diese beiden Felder beim automatischen Ausfüllen von „created_at“ / „update_at“ nicht finden.
Deaktivieren Sie das automatische Ausfüllen von Zeitstempeln, fügen Sie einfach das vorherige Attribut zum Eloquent-Modell hinzu:
class Role extends Model { public $timestamps = FALSE; // ... 其他的属性和方法 }
2. Ändern Sie die Standardliste der Zeitstempel
Wenn aktuell Was soll ich tun, wenn ich eine Nicht-Laravel-Datenbank verwende und meine Zeitstempelspalte einen anderen Namen hat? Möglicherweise heißen sie „create_time“ bzw. „update_time“. Herzlichen Glückwunsch, Sie können es auch so im Modell definieren:
class Role extends Model { const CREATED_AT = 'create_time'; const UPDATED_AT = 'update_time';
3. Ändern Sie das Datums-/Uhrzeitformat des Zeitstempels
Der folgende Inhalt bezieht sich auf die offizielle Laravel-Dokumentation :
Standardmäßig wird der Zeitstempel automatisch als „Y-m-d H:i:s“ formatiert. Wenn Sie ein benutzerdefiniertes Zeitstempelformat benötigen, können Sie die Eigenschaft $dateFormat in Ihrem Modell festlegen. Dieses Attribut bestimmt das Format, in dem das Datum in der Datenbank gespeichert und in ein Array oder JSON serialisiert wird:
class Flight extends Model { /** * 日期时间的存储格式 * * @var string */ protected $dateFormat = 'U'; }
4 > Bei einer Viele-zu-Viele-Zuordnung wird der Zeitstempel nicht automatisch ausgefüllt, z. B. in der Zwischentabelle „role_user“ zwischen der Benutzertabelle „users“ und der Rollentabelle „roles“.
In diesem Modell können Sie die Beziehung wie folgt definieren:
class User extends Model { public function roles() { return $this->belongsToMany(Role::class); } }
Wenn Sie dann dem Benutzer eine Rolle hinzufügen möchten, können Sie sie wie folgt verwenden:
$roleID = 1; $user->roles()->attach($roleID);
Standardmäßig enthält diese mittlere Tabelle keine Zeitstempel. Und Laravel wird nicht versuchen, „created_at/updated_at“ automatisch auszufüllen
, aber wenn Sie Zeitstempel automatisch speichern möchten, müssen Sie „created_at/updated_at“ in der Migrationsdatei hinzufügen und dann ->withTimestamps() in den Modellen hinzufügen Assoziation ;
public function roles() { return $this->belongsToMany(Role::class)->withTimestamps(); }5. Verwenden Sie „latest()“ und „oldest()“ für die Zeitstempelsortierung.
Es gibt zwei „Abkürzungsmethoden“ für die Verwendung der Zeitstempelsortierung.
Stattdessen:
User::orderBy('created_at', 'desc')->get();
Das geht schneller:
User::latest()->get();
Latest() verwendet standardmäßig die Sortierung „created_at“.
Entsprechend gibt es ein „east()“, das wie „created_at“ aufsteigend sortiert wird
User::oldest()->get();
Selbstverständlich können auch andere angegebene Felder zum Sortieren verwendet werden. Wenn Sie beispielsweise „update_at“ verwenden möchten, können Sie Folgendes tun:
$lastUpdatedUser = User::latest('updated_at')->first();6. Lösen Sie die Änderung von „update_at“ nicht aus
Immer wenn ein Eloquent-Datensatz geändert wird, Das Feld „update_at“ wird automatisch mit dem aktuellen Zeitstempel verwaltet, was eine großartige Funktion ist.
Aber manchmal möchten Sie dies nicht tun, zum Beispiel: Wenn Sie einen Wert hinzufügen, denken Sie, dass es sich nicht um eine „Aktualisierung der gesamten Zeile“ handelt.
Dann können Sie das Gleiche wie oben tun – deaktivieren Sie einfach die Zeitstempel. Denken Sie daran, dass dies nur vorübergehend ist:
$user = User::find(1); $user->profile_views_count = 123; $user->timestamps = false; $user->save();7 Nur Zeitstempel und zugehörige Zeitstempel aktualisieren
Im Gegensatz zum vorherigen Beispiel müssen Sie möglicherweise nur das Feld „update_at“ aktualisieren, ohne andere Spalten zu ändern.
Die folgende Schreibmethode wird daher nicht empfohlen:
$user->update(['updated_at' => now()]);
Sie können eine schnellere Methode verwenden:
$user->touch();
Eine andere Situation, manchmal möchten Sie nicht nur das aktuelle Modell aktualisieren aktualisiert_at, möchte auch die Datensätze der übergeordneten Beziehungen aktualisieren.
Wenn beispielsweise ein Kommentar aktualisiert wird, möchten Sie die aktualisierte_at-Datei der Beitragstabelle aktualisieren.
Dann müssen Sie das Attribut $touches im Modell definieren:
class Comment extends Model { protected $touches = ['post']; public function post() { return $this->belongsTo('Post'); } }8. Das Zeitstempelfeld wird automatisch in die Carbon-Klasse konvertiert
Das letzte Tipp, aber eher eine Erinnerung, weil Sie es bereits wissen sollten.
Standardmäßig werden die Felder „created_at“ und „update_at“ automatisch in $dates konvertiert,
Sie müssen sie also nicht in Carbon-Instanzen konvertieren, um die Methoden von Carbon zu verwenden.
Beispiel:
$user->created_at->addDays(3); now()->diffInDays($user->updated_at);
Das war's, ein schneller, aber hoffentlich nützlicher Tipp!
Weitere technische Artikel zum Laravel-Framework finden Sie in der Spalte
Laravel-TutorialDas obige ist der detaillierte Inhalt von8 Tipps zur Verwendung von Laravel-Modell-Zeitstempeln. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!