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.
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.
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()
]);
Vérifiez si votre modèle a cette ligne.
public $timestamps = false;
Si c'est le cas, supprimez-le.
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 .. !!
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'));