Lorsque j'essaie de modifier le format du champ created_at par défaut de mon modèle de ressource, j'obtiens l'erreur suivante:
{
"error":{
"type":"InvalidArgumentException",
"message":"Unexpected data found.
Unexpected data found.
The separation symbol could not be found
Unexpected data found.
A two digit second could not be found",
"file":"\/var\/www\/html\...vendor\/nesbot\/carbon\/src\/Carbon\/Carbon.php",
"line":359
}
}
Voici le code qui a produit l'erreur ci-dessus:
$tile = Resource::with('comments, ratings')->where('resources.id', '=', 1)->first();
$created_at = $tile->created_at;
$tile->created_at = $created_at->copy()->tz(Auth::user()->timezone)->format('F j, Y @ g:i A');
Si je supprime ->format('F j, Y @ g:i A')
du code ci-dessus, cela fonctionne bien, mais ce n'est pas dans le format que je veux. Quel pourrait être le problème? J'ai du code presque identique ailleurs dans mon application et cela fonctionne sans erreur.
PDATE: L'utilisation de setToStringFormat('F j, Y @ g:i A')
ne provoque pas d'erreur, mais renvoie null
.
L'ajout du code suivant à mon modèle a fonctionné pour moi:
public function getCreatedAtAttribute($date)
{
if(Auth::check())
return Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $date)->copy()->tz(Auth::user()->timezone)->format('F j, Y @ g:i A');
else
return Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $date)->copy()->tz('America/Toronto')->format('F j, Y @ g:i A');
}
public function getUpdatedAtAttribute($date)
{
return Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $date)->format('F j, Y @ g:i A');
}
Cela me permet d'utiliser created_at
et updated_at
dans le format que je veux.
J'ai rencontré le même problème, et dans ma recherche d'une réponse, je suis tombé sur Comment expliquez-vous le résultat d'un nouveau\DateTime ('0000-00-00 00:00:00')? .
J'ai décidé de changer les colonnes datetime dans la base de données en nullable avec la valeur par défaut = NULL, pour empêcher les champs d'avoir la valeur '0000-00-00 00:00:00'.
Ma migration dans laravel 5 ressemble à ceci:
Schema::table('table', function($table)
{
$table->dateTime('created_at')->nullable()->default(null)->change();
$table->dateTime('updated_at')->nullable()->default(null)->change();
});
Ce n'est pas un problème de carbone, c'est un conflit entre un setAttribute
ou getAttribute
dans votre modèle.
Vous ne devriez pas essayer de changer le format de created_at
. Ce doit être un objet en carbone. Si vous souhaitez afficher la date created_at
Dans un format différent, formatez-la simplement au moment de la sortie. Ou vous pouvez créer une méthode qui modifie le format afin que vous puissiez l'appeler quand vous le souhaitez dans un format différent. Par exemple, ajoutez une méthode comme celle-ci à votre classe de ressources:
public function createdAtInMyFormat()
{
return $this->created_at->format('F j, Y @ g:i A');
}
Vous pouvez également demander à cette fonction d'ajuster le fuseau horaire, etc. Vous pouvez ensuite utiliser $tile->createdAtInMyFormat()
par exemple pour obtenir votre format spécial created_at
À partir de votre objet $tile
.
Vous devez analyser la date donnée avant d'enregistrer ce code utilisateur
Carbon::parse($request->input('some_date'));
J'ai rencontré ce problème, et c'était simplement une question d'utilisation des tirets au lieu des barres obliques.
$model->update(['some_date' => '2020/1/1']); // bad
$model->update(['some_date' => '2020-1-1']); // good
Rappel: Si vous spécifiez vos dates sur votre modèle, Eloquent est assez intelligent pour le convertir pour vous.
protected $dates = [ 'some_date' ];