Je n'arrive pas à insérer created_at
données dans la table de base de données avec Laravel. J'essaie d'obtenir ces données d'un POST), puis j'essaie de les sauvegarder dans la base de données.
Je suis en train de faire comme ça:
$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 cela donne une erreur:
Uncaught exception 'InvalidArgumentException' with message in Carbon.php
et
Unexpected data found. Unexpected data found. Data missing in Carbon.php
Comment puis-je résoudre ça? Dois-je définir $timestamps
dans mes modèles à faux? (Je ne veux vraiment pas faire ça parce que je comprends bien comment il insère automatiquement le updated_at
)
Dans votre modèle User
, ajoutez la ligne suivante dans la classe User
:
public $timestamps = true;
Maintenant, chaque fois que vous enregistrez ou mettez à jour un utilisateur, Laravel mettra automatiquement à jour le created_at
et updated_at
des champs.
Mise à jour:
Si vous souhaitez définir manuellement la création de, vous devez utiliser le format de 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.
Mise à jour: nov. 2018 Laravel 5.6"message": "Access level to App\\Note::$timestamps must be public",
Assurez-vous également d'avoir le bon niveau d'accès. Laravel 5.6 est public
.
Vous pouvez le définir manuellement à l'aide de Laravel. N'oubliez pas d'ajouter 'created_at' à votre tableau $ fillable:
protected $fillable = ['name', 'created_at'];
Actuellement (Laravel 5.4), le moyen d'y parvenir est:
$model = new Model();
$model->created_at = Carbon::now();
$model->save(['timestamps' => false]);
$data = array();
$data['created_at'] =new \DateTime();
DB::table('practice')->insert($data);
Dans mon cas, je voulais test unitaire que les utilisateurs n'étaient pas en mesure de vérifier leurs adresses électroniques après une heure, je ne voulais donc donner aucune autre réponse, car ils le feraient également. persiste quand je ne fais pas de tests unitaires, alors j'ai fini par mettre à jour manuellement la ligne après l'insertion:
// 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]
);
Remarque: Pour toute autre chose que les tests unitaires, je regarderais les autres réponses ici.