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:
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?
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
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.
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
Md. Saidur Rahman Milon
Eloquentes Modell:
class User extends Model
{
protected $table="users";
public $timestamps = false;
}
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
koen
Fügen Sie diese Zeile in Ihr Modell ein:
Vorhandene Variable überschreiben $timestampsStimmt zu FALSCH
/**
* Indicates if the model should be timestamped.
*
* @var bool
*/
public $timestamps = false;
13621300cookie-checkDeaktivieren Sie Laravels Eloquent-Zeitstempelyes