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.
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.
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()
]);
Prüfen Sie, ob Ihr Modell diese Linie hat.
public $timestamps = false;
Wenn ja, löschen Sie es.
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. !!
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'));