web-dev-qa-db-fra.com

Données inattendues trouvées lors de la sauvegarde sur eloquent / Laravel

J'ai un champ de plus sur la base de données sur created_at et updated_at comme TIMESTAMP le nom du champ est la date.

J'ai donc écrasé la méthode getDates() sur mon modèle éloquent parce que je voulais que ce champ soit instancié à partir de Carbon.

public function getDates()
{
   return ['date','created_at','updated_at'];
}

Mais lorsque je crée un nouvel enregistrement dans la base de données, il me jette une exception:

InvalidArgumentException Données inattendues trouvées. Données inattendues trouvées. Données inattendues trouvées.

Ps: la valeur envoyée à partir du formulaire est au format UE: d-m-Y h:i

Je ne sais pas comment résoudre ce problème aucune suggestion n'est appréciée

13
Fabrizio Fenoglio

Votre tableau renvoyé par getDates a été fusionné avec celui de dafault, ce qui donne:

['created_at','updated_at','deleted_at','date','created_at','updated_at'];

alors utilisez seulement 'date' et ça devrait aller.


Essayez de configurer un mutateur pour 'date' pour convertir les données d'entrée en format d'horodatage. L'erreur que vous obtenez ne concerne pas Eloquent mais Carbon.

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

De plus, il y a une erreur dans la documentation, car getDates définit les accesseurs de date, pas les mutateurs.

13
Jarek Tkaczyk

Essaye ça:

Carbon::createFromFormat('d.m.Y H:i', $request->publishdate);    
1
Doğuhan Elma

Même si cela fait un an que je suis et que je place mes commentaires pour ceux qui ont encore des difficultés, même après avoir paramétré le mutateur.

Si l'élément de date d'entrée html passe la date au format atome (1975-12-25T14: 15: 16-05: 00), le mutateur de date ne vous aidera pas. Vous devez appliquer le correctif suivant dans la classe Illuminate\Database\Eloquent\Model à la ligne # 2848 pour que cela fonctionne (dans laravel # 5).

$ value = Carbon :: createFromFormat ($ format, (nouveau DateTime ($ value)) -> format ('Y-m-d H: i: s'));

0
Senthil

Vous ne pouvez pas utiliser votre format "d-m-Y h: i"

Vous devez utiliser l'un de ceux-ci: horodatage UNIX, chaîne de date (Y-m-d), chaîne de date-heure, instance de DateTime/Carbon

https://laravel.com/docs/4.2/eloquent#accessors-and-mutators

0
Mantas D