web-dev-qa-db-de.com

Zeitstempel (update_at, created_at) sind null Laravel 5

Ich habe ein Problem mit updated_at-, created_at-Feldern in Laravel 5.

Hier ist meine Migration:

Schema::create('lots', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('lot');
    $table->integer('is_active');
    $table->timestamps();
});

Wenn ich jedoch Daten in diese Tabelle einfüge, sind die Felder updated_at und created_at null. Wie können sie mit aktuellen Zeitstempeln automatisch vervollständigt werden?

Ich füge Daten wie folgt ein:

\DB::table('admin_lots')->insert([
    'lot' => $request->cycle_lot,
    'is_active' => '1',
]);

Vielen Dank.

7
el valuta

Wenn Sie die Daten direkt einfügen, wird Laravel Ihre Zeitstempel nicht kennen. Sie können die Zeitstempel entweder manuell in der insert-Anweisung festlegen oder zur Verwendung von Eloquent-Modellen wechseln, die viele Dinge für Sie erledigen, einschließlich Zeitstempel. Es ist auch viel einfacher zu warten als direkte Abfragen, sofern zutreffend.

Eloquent ORM

5
overburn

Sie verwenden Eloquent wahrscheinlich nicht beim Einfügen von Daten. In diesem Fall sollten Sie Zeitstempel manuell hinzufügen.

Wenn Sie dies nicht möchten, aber dennoch gefüllte Zeitstempel benötigen, verwenden Sie diesen Hack :

$table->timestamp('created_at')->default(\DB::raw('CURRENT_TIMESTAMP'));
$table->timestamp('updated_at')->default(\DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));

Update

Basierend auf Ihrem aktualisierten Code finden Sie hier eine weitere Lösung:

\DB::table('admin_lots')->insert([
                'lot'   => $request->cycle_lot,
                'is_active'     => '1',
                'created_at' = \Carbon\Carbon::now()->toDateTimeString(),
                'updated_at' = \Carbon\Carbon::now()->toDateTimeString()
            ]);
5
Alexey Mezenin

Prüfen Sie, ob Ihr Modell diese Linie hat.

public $timestamps = false;

Wenn ja, löschen Sie es.

4

Sie müssen die fantastische Eloquent-Funktion von Laravel verwenden, um Zeitstempel automatisch in die Datenbank zu schreiben ...

Wenn Sie Ihr Beispiel sehen, wird der Code für eloquent folgendermaßen aussehen:

$lot_inputs = array(
    'lot' => $request->cycle_lot,
    'is_active' => 1
);
$new_lot = Lot::create($lot_inputs);

Bitte beachten Sie, dass Sie das Modell für die Tabelle = 'Lose' haben müssen (und es muss Eloquest erweitern), damit Sie Eloquent-Methoden und ihre Eigenschaften problemlos verwenden können.

Es wäre großartig, wenn Sie Eloquent ORM so weit wie möglich verwenden. Wenn Sie also in Zukunft Ihre DB-Technologie ändern möchten, müssen Sie die geschriebenen eloquenten Abfragen nicht erneut angeben (z. B. die Konvertierung der Abfrage in.) verschiedene DB-Sprachen werden automatisch von Eloquent ausgeführt)

Danke, ich hoffe, das wird Ihnen helfen, Ihr Problem zu lösen. !!

1
Saumya Rastogi

sie müssen in Laravel die Methode create anstelle der Methode insert verwenden. Methode erstellen fügt automatisch einen Zeitstempel für das Feld created_at und updated_at hinzu. User::create(array('name' => 'John'));

0
Rakesh Nandi