Deaktivieren Sie Laravels Eloquent-Zeitstempel

Lesezeit: 4 Minuten

Benutzer-Avatar
Projektxmatt

Ich bin dabei, eine unserer Webanwendungen von CodeIgniter auf Laravel umzustellen. Allerdings möchten wir in diesem Moment die nicht hinzufügen updated_at / created_at Felder in alle unsere Tabellen, da wir eine Logging-Klasse haben, die all dies bereits ausführlicher für uns erledigt.

Ich bin mir bewusst, dass ich einstellen kann $timestamps = false; in:

Vendor\laravel\framework\src\illuminate\Datebase\Eloquent\Model.php

Ich möchte jedoch lieber keine Kerndatei für Laravel ändern oder alle meine Modelle haben diese an der Spitze. Gibt es eine Möglichkeit, dies für alle Modelle an anderer Stelle zu deaktivieren?

Benutzer-Avatar
bgallagh3r

Entweder du musst deklarieren public $timestamps = false; in jedem Modell, oder erstellen Sie ein Basismodell, definieren Sie es dort und lassen Sie es von allen Ihren Modellen erweitern, anstatt es eloquent zu machen. Denken Sie nur daran, dass Pivot-Tabellen Zeitstempel haben MÜSSEN, wenn Sie Eloquent verwenden.

Update: Beachten Sie, dass Zeitstempel in Pivot-Tabellen nach Laravel v3 nicht mehr ERFORDERLICH sind.

Update: Sie können Zeitstempel auch deaktivieren, indem Sie sie entfernen $table->timestamps() von Ihrer Migration.

  • Ich weiß nicht, warum ich nie daran gedacht habe, ein BaseModel zu erstellen und es dort festzulegen. Funktioniert wunderbar. Nur ein Hinweis gemäß der Dokumentation Pivot-Tabellen benötigen es nur, wenn Sie jetzt withTimestamps() setzen (weiß nicht, ob sich dies gegenüber früheren Versionen geändert hat).

    – projectxmatt

    12. November 2013 um 19:29 Uhr

  • Die Methode withTimestamps() war mir nicht bekannt. Ich muss es mir ansehen.

    – bgallagh3r

    12. November 2013 um 19:39 Uhr

  • @bgallagh3r, gibt es sowieso nur für Perticuler-Abfragen zu deaktivieren. Sagen wir, für die Fontend-Anzeige möchte ich keinen Zeitstempel, aber für das Backend möchte ich einen Zeitstempel. Gibt es das trotzdem?

    – Benutzer7747472

    12. Juni 2018 um 18:25 Uhr

  • Wenn Sie $table->timestamps() aus der Migration entfernen, wird eloquent sie weiterhin in die Abfrage aufnehmen. Dies führt zu einem Fehler, da das Feld nicht existiert. Ansonsten tolle Antwort.

    – Thijs Stahl

    6. Juli 2018 um 8:31 Uhr

  • Ja, das ist auch heute noch so (Laravel Framework v7.22.4). Habe diesen Thread gefunden, der versucht, dieses Problem zu umgehen. Sie müssen die Zeitstempel explizit über deaktivieren $timestamps = false; um zB eine Tabelle zu säen, die keine hat created_at und updated_at Felder.

    – CLN

    13. August 2020 um 9:56 Uhr

Benutzer-Avatar
Pimarc

Platzieren Sie diese Linie einfach in Ihrem Modell:

public $timestamps = false;

Und das ist es!


Beispiel:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    public $timestamps = false;

    //
}

So deaktivieren Sie Zeitstempel für eine Operation (z. B. in einem Controller):

$post->content="Your content"; 
$post->timestamps = false; // Will not modify the timestamps on save
$post->save();

So deaktivieren Sie Zeitstempel für alle Ihre Modelleerstelle eine neue BaseModel Datei:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class BaseModel extends Model
{
    public $timestamps = false;

    //
}

Erweitern Sie dann jedes Ihrer Modelle mit dem BaseModelso:

<?php

namespace App;

class Post extends BaseModel
{
    //
}

Wenn Sie 5.5.x verwenden:

const UPDATED_AT = null;

Und für das Feld „created_at“ können Sie Folgendes verwenden:

const CREATED_AT = null;

Stellen Sie sicher, dass Sie auf der neuesten Version sind. (Dies wurde in Laravel 5.5.0 gebrochen und in 5.5.5 wieder behoben).

Wenn Sie nur die Aktualisierung von updated_at deaktivieren müssen, fügen Sie einfach diese Methode zu Ihrem Modell hinzu.

public function setUpdatedAtAttribute($value)
{
    // to Disable updated_at
}

Dadurch wird die übergeordnete Methode setUpdatedAtAttribute() überschrieben. created_at funktioniert wie gewohnt. Auf die gleiche Weise können Sie eine Methode schreiben, um nur die Aktualisierung von created_at zu deaktivieren.

Benutzer-Avatar
Echtes Spiel

Falls Sie wie zuvor erwähnt Zeitstempel aus einem vorhandenen Modell entfernen möchten, platzieren Sie dies in Ihrem Modell:

public $timestamps = false;

Erstellen Sie auch eine Migration mit folgendem Code in der up() Methode und führe sie aus:

Schema::table('your_model_table', function (Blueprint $table) {
    $table->dropTimestamps();
});

Sie können verwenden $table->timestamps() in deiner down() Methode, um ein Rollback zu ermöglichen.

  • Dies sollte die beste Antwort sein. Wenn Sie über eine vorhandene Produktionsdatenbank verfügen, müssen Sie eine Migration ausführen und Zeitstempel für das Modell deaktivieren.

    – Brad

    9. Februar 2019 um 19:04 Uhr


Benutzer-Avatar
Md. Saidur Rahman Milon

Eloquentes Modell:

class User extends Model    
{      
    protected $table="users";

    public $timestamps = false;
}

Oder versuchen Sie es einfach

$users = new Users();
$users->timestamps = false;
$users->name="John Doe";
$users->email="[email protected]";
$users->save();

  • Dies sollte die beste Antwort sein. Wenn Sie über eine vorhandene Produktionsdatenbank verfügen, müssen Sie eine Migration ausführen und Zeitstempel für das Modell deaktivieren.

    – Brad

    9. Februar 2019 um 19:04 Uhr


Benutzer-Avatar
koen

Fügen Sie diese Zeile in Ihr Modell ein:

Vorhandene Variable überschreiben $timestamps Stimmt zu FALSCH

/**
 * Indicates if the model should be timestamped.
 *
 * @var bool
 */

public $timestamps = false;

1362130cookie-checkDeaktivieren Sie Laravels Eloquent-Zeitstempel

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy