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

8 Tipps zur Verwendung von Laravel-Modell-Zeitstempeln

藏色散人
藏色散人nach vorne
2020-01-20 13:20:534283Durchsuche

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

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen