Insertion de données créées à L'aide de Laravel

je n'arrive pas à insérer created_at données dans la table de base de données avec Laravel. J'essaie de récupérer les données d'un POST et de les sauvegarder dans la base de données.

je suis actuellement en train de faire comme ceci:

$create_dt = date("Y-m-d H:i:s A", strtotime($_POST['post_date']." ".$_POST['post_time']));
$name = $_POST['name'];

$post = new Post();
$post->name = $name;
...
$post->created_at = $create_dt;
$post->save();

Mais il donne une erreur:

Uncaught exception 'InvalidArgumentException' with message in Carbon.php

et

Unexpected data found. Unexpected data found. Data missing in Carbon.php

comment résoudre ce problème? Dois-je créer $timestamps dans Mes modèles à false? (Je ne veux vraiment pas le faire parce que je suis à l'aise avec la façon dont il insère automatiquement le updated_at)

18
demandé sur Pratik Gadoya 2014-10-22 15:45:30

5 réponses

Dans votre User modèle, ajoutez la ligne suivante dans la section User catégorie:

protected $timestamps = true;

maintenant, chaque fois que vous sauvegardez ou mettez à jour un utilisateur, Laravel met automatiquement à jour le created_at et updated_at champs.



mise à Jour:

Si vous voulez définir manuellement le format créé, vous devez utiliser le format date Y-m-d H:i:s. Le problème est que le format que vous avez utilisé n'est pas le même que Laravel utilise pour le created_at champ.

26
répondu Jerodev 2014-10-22 12:01:05

Vous pouvez le définir manuellement en utilisant Laravel, n'oubliez pas d'ajouter 'created_at' à votre tableau $ fillable:

protected $fillable = ['name', 'created_at']; 
14
répondu Sabrina Leggett 2015-10-20 22:26:09
$data = array();
$data['created_at'] =new \DateTime();
DB::table('practice')->insert($data);
7
répondu socm_ 2016-08-01 18:51:17

Actuellement (Laravel 5.4) la façon d'y parvenir est:

$model = new Model();
$model->created_at = Carbon::now();
$model->save(['timestamps' => false]);
3
répondu eithed 2017-11-08 12:32:58

Dans mon cas, je voulais test unitaire que les utilisateurs n'étaient pas en mesure de vérifier leurs adresses e-mail après une heure avait passé, donc je ne voulais pas faire aucune des autres réponses car ils persisteraient aussi quand Non Unité de test, donc j'ai fini par mettre à jour manuellement la ligne après insert:

// Create new user
$user = factory(User::class)->create();

// Add an email verification token to the 
// email_verification_tokens table
$token = $user->generateNewEmailVerificationToken();

// Get the time 61 minutes ago
$created_at = (new Carbon())->subMinutes(61);

// Do the update
\DB::update(
    'UPDATE email_verification_tokens SET created_at = ?',
    [$created_at]
);

Note: pour tout ce qui est autre que les tests unitaires, je voudrais regarder les autres réponses ici.

1
répondu Mike 2018-03-27 23:25:35