web-dev-qa-db-fra.com

Les horodatages (updated_at, created_at) sont null dans Laravel 5

J'ai un problème avec les champs updated_at, created_at dans Laravel 5.

Voici ma migration:

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

Mais lorsque j'insère des données dans cette table, les champs updated_at et created_at sont nuls. Comment les rendre automatiques avec les horodatages actuels?

J'insère des données comme ceci:

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

Merci.

7
el valuta

Lorsque vous installez des données directement, Laravel ne saura rien de votre horodatage. Vous pouvez définir les horodatages manuellement dans l’instruction d’insertion ou utiliser des modèles Eloquent, qui gèrent de nombreuses opérations prêtes à l’emploi, notamment les horodatages. Il est également plus facile à gérer que les requêtes directes, le cas échéant.

Eloquent ORM

5
overburn

Vous n'utilisez probablement pas Eloquent lors de l'insertion de données. Dans ce cas, vous devez ajouter les horodatages manuellement.

Si vous ne voulez pas faire cela, mais que vous avez toujours besoin d’horodatages remplis, utilisez ce hack :

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

Mettre à jour

En fonction de votre code mis à jour, voici une autre solution:

\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

Vérifiez si votre modèle a cette ligne.

public $timestamps = false;

Si c'est le cas, supprimez-le.

4
Yevgeniy Afanasyev

Vous devez utiliser l'impressionnante fonctionnalité Eloquent de Laravel pour créer automatiquement des horodatages dans la base de données ...

En voyant votre exemple, le code pour éloquent se présente comme suit:

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

Veuillez noter que vous devez avoir le modèle pour la table = 'lots' (et il doit être étendu à Eloquest) afin que vous puissiez facilement utiliser les méthodes Eloquent et ses propriétés ...

Ce serait bien si vous utilisiez autant que possible Eloquent ORM afin que, si vous souhaitez modifier à l'avenir votre technologie de base de données, vous n'aurez plus besoin de spécifier les requêtes éloquentes écrites différents langages DB sont automatiquement créés par Eloquent)

Merci, j'espère que cela vous aidera à résoudre votre problème .. !!

1
Saumya Rastogi

vous devez utiliser la méthode create au lieu de la méthode insert dans laravel . La méthode Create ajoute automatiquement un horodatage pour les champs created_at et updated_at .User::create(array('name' => 'John'));

0
Rakesh Nandi