web-dev-qa-db-fra.com

Conversion d'une date carbone en horodatage mysql.

J'ai une colonne de variable d'horodatage dans une base de données mysql. Essayer de convertir un horodatage carbone en quelque chose que je peux y entrer, mais Carbon::now() ne renvoie qu'un objet Carbon et lorsque j'essaie d'utiliser la chaîne d'horodatage de l'objet Carbon, il ne s'enregistre pas dans mysql.

public function store(CreateArticleRequest $request){
        $input = $request->all(); 
        var_dump($input); // JUST SO YOU CAN SEE
        $input['published_at'] = Carbon::now(); 
        var_dump($input); // JUST SO YOU CAN SEE
        Article::create($input);   
}

Mon premier vid var est comme ça:

array (size=4)
  '_token' => string 'Wy67a4hWxrnfiGz61wmXfYCSjAdldv26wOJiLWNc' (length=40)
  'title' => string 'ASDFasdf' (length=8)
  'body' => string 'asdfasdf' (length=8)
  'published_at' => string '2015-08-26' (length=10)  

Mon deuxième vid var est comme ça.

La colonne mysql relative à "published_at" est une variable d'horodatage. Comment puis-je supposer de convertir cela à partir d'un objet carbone?

Merci d'avance.

12
1N5818

La réponse courte est que toDateTimeString() est ce que vous recherchez:

$input['published_at'] = Carbon::now()->toDateTimeString();

Voir http://carbon.nesbot.com/docs/ pour plus d'options, y compris toDateString() si vous voulez juste la partie date et non l'heure.

Mais une meilleure façon de le gérer serait de laisser Laravel gérer le cast de la valeur de la date vers/depuis un objet Carbon pour vous. Voir https://laravel.com/docs /5.4/eloquent-mutators#date-mutators .

24
orrd

Le problème est dans votre chaîne de date, par exemple, vous avez ceci:

public function setCrbDateAttribute($value)
{
     $this->attributes['crb_date'] = \Carbon\Carbon::createFromFormat('d-m-Y h:i', $value);
}

Maintenant, s'il y a une date comme 10-12-2014, cette erreur se produira car l'heure et la minute sont manquantes. Donc, vous vous assurez que la date contient tous les pars et assurez-vous également que la chaîne de date contient - comme séparateur pas /.

En d'autres termes, vérifiez la valeur $ avant d'utiliser Carbon et assurez-vous que votre chaîne de date contient exactement la même chaîne formatée que vous avez utilisée dans la méthode.

Cela se produit également dans une méthode d'accesseur, vérifiez donc d'abord la valeur de la date avant de l'utiliser dans Carbon::createFromFormat().

Si vous obtenez la date de l'entrée utilisateur, validez la date avant de l'utiliser en utilisant la règle date ou date_format: format, vérifiez la validation ici.

Réf réponse:

Laravel/Carbon Timestamp 0000-00-00 00:00:00 ou Données inattendues trouvées. Données inattendues trouvées. Données manquantes

5
iCoders