web-dev-qa-db-fra.com

Carbon.php Impossible de trouver le symbole de séparation Données manquantes

Tout d'abord, je récupère tous les enregistrements,

//get inventory items
$inv = inventory::all();

puis je boucle sur les enregistrements récupérés et modifie les données created_at et updated_at pour les rendre plus lisibles par l'homme.

foreach($inv as $i){
    $i->created_at = date("M d, Y",strtotime($i->created_at));
    $i->updated_at = date("M d, Y",strtotime($i->updated_at));
}

mais cela me renvoie cette erreur,

InvalidArgumentException dans Carbon.php, ligne 425: données inattendues a trouvé. Données inattendues trouvées. Le symbole de séparation est introuvable Données manquantes

des idées, aide, indices, suggestions, recommandations s'il vous plaît?

voici mon modèle

namespace App;

use Illuminate\Database\Eloquent\Model;

class inventory extends Model
{
    protected $table = "inventory";
    protected $primaryKey = "item_id";
    public $incrementing = false;

    public function profile(){
        return $this->belongsTo('App\profile','username');
    }
    public function inventory_images(){
        return $this->hasMany('App\inventory_images','item_id');
    }
}

et dans la lame, je peux juste utiliser

{{ date("M d, Y",strtotime($i->created_at)) }}

{{ date("M d, Y",strtotime($i->updated_at)) }}

et ça marche très bien.

7
Juliver Galleto

Je pense que tu t'y prends mal. Les données de votre base de données n'ont pas besoin d'être plus lisibles par l'homme, mais uniquement par l'affichage qu'un humain interacts avec.

Pour résoudre ce problème, nous allons créer une méthode accessor personnalisée qui s'appliquera à tous les appels pour le created_at. You can recreate this for theupdated_at`.

public function getCreatedAtAttribute($timestamp) {
    return Carbon\Carbon::parse($timestamp)->format('M d, Y');
}

Ensuite, lorsque vous appelez $model->created_at, votre attribut retourne dans ce format.

Si, pour une raison quelconque, vous avez absolument besoin de la date stockée dans ce format, vous devez ajouter un attribut à votre modèle, lui indiquant que les colonnes timestamp doivent être formatées selon un type spécifique, tel que:

protected $dateFormat = 'M d, Y';

Sidenote

La raison pour laquelle Carbon est impliqué est qu'elle est appliquée à toutes les colonnes générées par $table->timestamps(), donc les colonnes created_at et updated_at. De plus, si vous ajoutez plus de colonnes du modèle au tableau protected $dates = [], celles-ci seront également gérées automatiquement par Carbon.

3
Ohgodwhy