Heim > Artikel > PHP-Framework > 8 Tipps zur Verwendung von Laravel-Modell-Zeitstempeln, die Sie kennen sollten (Sammlung)
Die folgende Tutorial-Kolumne von Laravel gibt Ihnen 8 Tipps zur Verwendung von Laravel-Modell-Zeitstempeln. Wenn nicht, sammeln Sie sie jetzt einfach ein.
Standardmäßig verfügt die Standarddatentabelle des Laravel Eloquent-Modells über zwei Felder: erstellt_at und aktualisiert_at. Natürlich können wir viele individuelle Konfigurationen vornehmen und viele interessante Funktionen implementieren. Nachfolgend finden Sie Beispiele.
1. Zeitstempel deaktivieren
Wenn die Datentabelle diese beiden Felder nicht enthält, wird beim Speichern der Daten ein SQL-Fehler angezeigt. Laravel kann diese beiden Felder beim automatischen Ausfüllen von „created_at“ / „update_at“ nicht finden.
Um das automatische Ausfüllen von Zeitstempeln zu deaktivieren, 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 Sie derzeit eine Datenbank vom Typ Nicht-Laravel verwenden, d. h. Ihre Zeitstempelspalte Was soll ich tun, wenn die Benennungsmethode unterschiedlich ist? 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 formatiert 'Y-m-d H :i:s'. Wenn Sie ein benutzerdefiniertes Zeitstempelformat benötigen, können Sie die Eigenschaft $dateFormat in Ihrem Modell festlegen. Dieses Attribut bestimmt das Speicherformat des Datums in der Datenbank und das Format bei der Serialisierung in ein Array oder JSON:
class Flight extends Model { /** * 日期时间的存储格式 * * @var string */ protected $dateFormat = 'U'; }
4: Zwischentabelle mit Zeitstempel
Wenn in einem Many-to- Bei vielen Assoziationen wird der Zeitstempel nicht automatisch ausgefüllt, z. B. zwischen der Benutzertabelle „users“ und der Rollentabelle „roles“ in der Zwischentabelle „role_user“.
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 Zwischentabelle keine Zeitstempel. Und Laravel wird nicht versuchen, „created_at/updated_at“ automatisch auszufüllen. Wenn Sie jedoch Zeitstempel automatisch speichern möchten, müssen Sie „created_at/updated_at“ in der Migrationsdatei hinzufügen und dann ->withTimestamps();
public function roles() { return $this->belongsToMany(Role::class)->withTimestamps(); }
in der Modellzuordnung hinzufügen 5. Verwenden Sie „latest()“ und „eastest()“ für die Zeitstempelsortierung
Es gibt zwei „Abkürzungsmethoden“ für die Zeitstempelsortierung. Stattdessen:User::orderBy('created_at', 'desc')->get();Es geht schneller:
User::latest()->get();
User::latest()->get();
默认情况,latest() 使用 created_at 排序。
与之对应,有一个 oldest() ,将会这么排序 created_at ascending
User::oldest()->get();
当然,也可以使用指定的其他字段排序。例如,如果想要使用 updated_at,可以这么做:
$lastUpdatedUser = User::latest('updated_at')->first();
6、不触发 updated_at 的修改
无论何时,当修改 Eloquent 记录,都将会自动使用当前时间戳来维护 updated_at 字段,这是个非常棒的特性。
但是有时候你却不想这么做,例如:当增加某个值,认为这不是 “整行更新”。
那么,你可以一切如上 —— 只需禁用 timestamps,记住这是临时的:
$user = User::find(1); $user->profile_views_count = 123; $user->timestamps = false; $user->save();复制代码
7、仅更新时间戳和关联时间戳
与上一个例子恰好相反,也许您需要仅更新 updated_at 字段,而不改变其他列。
所以,不建议下面这种写法:
$user->update(['updated_at' => now()]);
您可以使用更快捷的方法:
$user->touch();
Standardmäßig verwendet Latest() die Sortierung „created_at“.
Entsprechend gibt es ein „east()“, das aufsteigend in „created_at“ sortiert wird
User::oldest()->get();
Natürlich können Sie auch andere angegebene Werte verwenden Feldsortierung. Wenn Sie beispielsweise „update_at“ verwenden möchten, können Sie Folgendes tun:
class Comment extends Model { protected $touches = ['post']; public function post() { return $this->belongsTo('Post'); } }
6. Lösen Sie die Änderung von „update_at“ nicht aus.
Immer wenn ein Eloquent-Datensatz geändert wird, wird das Feld „update_at“ automatisch mit dem aktuellen Zeitstempel beibehalten. Das ist eine sehr coole Funktion.
Aber manchmal möchten Sie dies nicht tun, zum Beispiel: Wenn Sie einen bestimmten Wert hinzufügen, denken Sie, dass es sich nicht um eine „Aktualisierung der gesamten Zeile“ handelt.
Sie können also alles wie oben beschrieben tun – deaktivieren Sie einfach die Zeitstempel. Denken Sie daran, dass dies nur vorübergehend ist:
$user->created_at->addDays(3); now()->diffInDays($user->updated_at);7. Aktualisieren Sie nur Zeitstempel und zugehörige Zeitstempel aktualisiertes_at-Feld, ohne andere Spalten zu ändern.
Daher wird die folgende Schreibmethode 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 die aktualisierte_at-Datei des aktuellen Modells aktualisieren, sondern auch die Datensätze der übergeordneten Beziehung. 🎜🎜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: 🎜rrreee🎜🎜8. Automatische Konvertierung des Zeitstempelfelds in die Carbon-Klasse🎜🎜🎜Letzter 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. 🎜🎜Zum Beispiel: 🎜rrreee🎜Weitere Programmierkenntnisse finden Sie unter: 🎜Programmiervideo🎜! ! 🎜Das obige ist der detaillierte Inhalt von8 Tipps zur Verwendung von Laravel-Modell-Zeitstempeln, die Sie kennen sollten (Sammlung). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!