Heim > PHP-Framework > Laravel > 8 Tipps zur Verwendung von Laravel-Modell-Zeitstempeln

8 Tipps zur Verwendung von Laravel-Modell-Zeitstempeln

藏色散人
Freigeben: 2020-01-20 13:20:53
nach vorne
4305 Leute haben es durchsucht

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;
    // ... 其他的属性和方法
}
Nach dem Login kopieren

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';
Nach dem Login kopieren

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';
}
Nach dem Login kopieren

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);
    }
}
Nach dem Login kopieren

Wenn Sie dann dem Benutzer eine Rolle hinzufügen möchten, können Sie sie wie folgt verwenden:

$roleID = 1;
$user->roles()->attach($roleID);
Nach dem Login kopieren

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();
}
Nach dem Login kopieren

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();
Nach dem Login kopieren

Das geht schneller:

User::latest()->get();
Nach dem Login kopieren

Latest() verwendet standardmäßig die Sortierung „created_at“.

Entsprechend gibt es ein „east()“, das wie „created_at“ aufsteigend sortiert wird

User::oldest()->get();
Nach dem Login kopieren

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();
Nach dem Login kopieren

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();
Nach dem Login kopieren

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()]);
Nach dem Login kopieren

Sie können eine schnellere Methode verwenden:

$user->touch();
Nach dem Login kopieren

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');
    }
}
Nach dem Login kopieren

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);
Nach dem Login kopieren

Das war's, ein schneller, aber hoffentlich nützlicher Tipp!

Weitere technische Artikel zum Laravel-Framework finden Sie in der Spalte

Laravel-Tutorial

!

Das 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!

Verwandte Etiketten:
Quelle:learnku.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage