web-dev-qa-db-de.com

Deaktiviere Laravels beredte Zeitstempel

Ich bin dabei, eine unserer Webanwendungen von CodeIgniter nach Laravel zu konvertieren. In diesem Moment möchten wir jedoch nicht die Felder updated_at/created_at Zu allen unseren Tabellen hinzufügen, da wir bereits eine Protokollierungsklasse haben, die dies alles ausführlicher für uns ausführt.

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

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

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

154
projectxmatt

Sie müssen entweder in jedem Modell public $timestamps = false; Deklarieren oder ein BaseModel erstellen, es dort definieren und von allen Ihren Modellen erweitern lassen, anstatt es eloquent zu machen. Wenn Sie Eloquent verwenden, MÜSSEN Pivot-Tabellen unbedingt Zeitstempel haben.

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

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

306
bgallagh3r

Einfach platzieren public $timestamps = false; in Ihrem Modell.

91
PhilMarc

Wenn Sie nur die Aktualisierung von updated_at deaktivieren müssen, fügen Sie diese Methode 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 das Aktualisieren von created_at zu deaktivieren.

21
Sampath Perera

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 und erneut in 5.5.5 behoben) gebrochen.

17
Sampath Perera

Eloquentes Modell:

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

    public $timestamps = false;
}

Oder einfach mal probieren

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

Wenn Sie Zeitstempel wie oben erwähnt aus einem vorhandenen Modell entfernen möchten, fügen Sie diese in Ihr Modell ein:

public $timestamps = false;

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

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

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

6
realplay

deklarieren Sie einfach die Variable public timestamps in Ihrem Model bis false und alles wird großartig funktionieren.

public $timestamps = false;

5
Shahrukh Anwar

fügen Sie diese Zeile in Ihr Modell ein

vorhandene Variable überschreiben $timestampstrue bis false

/**
 * Indicates if the model should be timestamped.
 *
 * @var bool
 */
public $timestamps = false;
2
Jignesh Joisar

Überschreiben Sie die Funktionen setUpdatedAt() und getUpdatedAtColumn() in Ihrem Modell

public function setUpdatedAt($value)
{
   //Do-nothing
}

public function getUpdatedAtColumn()
{
    //Do-nothing
}
1
Krishan