web-dev-qa-db-fra.com

Laravel created_at retourne un objet à la place du format de date dans la base de données?

J'essaie de retourner created_at datetime de la table des utilisateurs dans la réponse JSON dans Laravel.

Dans mes databaes, il affiche la valeur comme 2016-07-18 00:00:00 mais quand j'essaie de revenir dans l'API JSON, il se convertit en

{
    date: "2016-07-18 00:00:00.000000",
    timezone_type: 3,
    timezone: "UTC"
}

Comment puis-je résoudre ce problème?

10
Abhishek Badole

Vous avez Carbon dans Laravel framework qui vous aide à faire votre datetime comme vous voulez avec le code ci-dessous.

        $created_at = new Carbon($value)->toDateTimeString();

passez maintenant $created_at à la place de created_at. exemple de code pour la table des utilisateurs (REMARQUE: non testé, vérifiez vous-même que vous devez passer un objet ou un tableau)

        $user = User::find(1);
        $user->created_at = new Carbon($user->created_at)->toDateTimeString();
9
Prashant Barve

Par défaut created_at et updated_at sont Carbon objets, vous pouvez donc faire simplement:

$object->created_at->toDateTimeString();

pour revenir au format Y-m-d H:i:s

13
Marcin Nabiałek

Vous pouvez changer ce comportement en ajoutant la méthode serializeUsing Dans votre classe AppServiceProvider pour mettre à jour le format de sérialisation json des dates, cela n'affecte que les appels api ( docs ), voici un exemple:

use Illuminate\Support\Carbon;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Carbon::serializeUsing(function ($carbon) {
            return $carbon->format('Y-m-d H:i:s');
        });
    }

    ...

}
3
YouneL

Puisque vous souhaitez obtenir une réponse JSON, vous pouvez utiliser Eloquent API Resource pour transformer l'objet Carbon en n'importe quel format, par exemple:

return [
    'created_at' => $this->created_at->toDateTimeString(),
    ....
];
3
Alexey Mezenin