web-dev-qa-db-fra.com

Laravel model Trailing Data lors de l'enregistrement du modèle

J'ai un code comme celui-ci

    $editStuState = StuAtt::where('studentId' , '=' , $id)->first();
    $editStuState -> leave +=1;
    $editStuState -> present = $editStuState -> present-1;
    $editStuState->update();
                            //OR
    $editStuState->save();
    return 'this is good';

Je ne peux pas enregistrer ou mettre à jour mes données, lorsque je supprime la ligne associée Mettre à jour et enregistrer, il peut imprimer du texte.

ce sont les données dd($editStuState)

StuAtt {#382 ▼
  #table: "stu_attendance"
  #connection: "mysql"
  #primaryKey: "id"
  #keyType: "int"
  +incrementing: true
  #with: []
  #withCount: []
  #perPage: 15
  +exists: true
  +wasRecentlyCreated: false
  #attributes: array:7 [▼
    "id" => "7"
    "studentId" => "1"
    "present" => "2"
    "absent" => "1"
    "leave" => "10"
    "created_at" => "2018-04-16 11:17:41.176898"
    "updated_at" => "2018-04-16 06:47:41.000000"
  ]
  #original: array:7 [▼
    "id" => "7"
    "studentId" => "1"
    "present" => "2"
    "absent" => "1"
    "leave" => "10"
    "created_at" => "2018-04-16 11:17:41.176898"
    "updated_at" => "2018-04-16 06:47:41.000000"
  ]
  #changes: []
  #casts: []
  #dates: []
  #dateFormat: null
  #appends: []
  #dispatchesEvents: []
  #observables: []
  #relations: []
  #touches: []
  +timestamps: true
  #hidden: []
  #visible: []
  #fillable: []
  #guarded: array:1 [▶]
}

J'ai également obtenu ce formulaire d'erreur laravel 5.6 it

InvalidArgumentException
Trailing data
9
Nasser

Les données de fin sont une erreur Carbon, c'est parce que vous utilisez probablement Postgres et que votre date renvoie des millisecondes.

"created_at" => "2018-04-19 07:01:19.929554"

Vous pouvez ajouter la méthode suivante à votre modèle (de base).

public function getDateFormat()
{
     return 'Y-m-d H:i:s.u';
}

Si vous utilisez TIME WITH TIMEZONE dans Postgres, le format doit être:

Y-m-d H:i:s.uO

10
Nasser

Si vous utilisez Postgres, vous devez ajouter quelques lignes à vos modèles. Cela se produit à cause de TIME WITH TIMEZONE à Postgres.

Veuillez également lire Date Mutators as Laravel prend déjà en charge cette fonction, mettez simplement la ligne ci-dessous dans votre modèle pour remplacer le format de date par défaut pour ce modèle: https://laravel.com/docs /5.7/eloquent-mutators#date-mutators

Accédez à votre application/modèle (sous le dossier app, exp. User, SomeModel), ajoutez la ligne ci-dessous:

protected $dateFormat = 'Y-m-d H:i:sO';

Meilleur

Changez votre code, de:

$editStuState = StuAtt::where('studentId' , '=' , $id)->first();
$editStuState -> leave +=1;
$editStuState -> present = $editStuState -> present-1;
$editStuState->update();
                        //OR
$editStuState->save();
return 'this is good';

À:

$editStuState = StuAtt::where('studentId' , '=' , $id)->first();
$editStuState -> leave +=1;
$editStuState -> present = $editStuState -> present-1;
$editStuState->save();
return 'this is good';

La méthode -> mise à jour (...) est utilisée pour les mises à jour en masse, vérifiez Mises à jour en masse

1
Aleksa Nikolic

Si votre base de données est Postgres et votre champ est Timestamp, parfois Carbon ne peut pas se convertir au format par défaut (sans millisecondes).

Si des millisecondes ne sont pas nécessaires, mettez à jour le contenu du champ pour ne pas avoir la partie en millisecondes.

UPDATE YOURTABLE SET created_at = date_trunc('seconds', created_at),
updated_at = date_trunc('seconds', updated_at)

Cela normalisera les champs horodatés sans millisecondes.

0
Marcos Regis