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
)
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.
Vous pouvez le définir manuellement en utilisant Laravel, n'oubliez pas d'ajouter 'created_at' à votre tableau $ fillable:
protected $fillable = ['name', 'created_at'];
$data = array();
$data['created_at'] =new \DateTime();
DB::table('practice')->insert($data);
Actuellement (Laravel 5.4) la façon d'y parvenir est:
$model = new Model();
$model->created_at = Carbon::now();
$model->save(['timestamps' => false]);
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.