Laravel model Trailing Data when save the model

2020-02-28 04:23发布

I have some code like this

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

I can't save or Update my data, when I remove Update and Save related line it can print text.

this is the dd($editStuState) data

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 [▶]
}

I also got this error form laravel 5.6 it

InvalidArgumentException
Trailing data

5条回答
趁早两清
2楼-- · 2020-02-28 04:46

If your Database is Postgres and your field is Timestamp sometimes Carbon cannot convert to default format (without milliseconds).

If milliseconds is not needed, update field content to not have the millisecond part.

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

This will normalize timestamped fields without milliseconds.

查看更多
可以哭但决不认输i
3楼-- · 2020-02-28 04:50

I have the same problem, but I changed the column name to creation_date , the problem solved.

查看更多
beautiful°
4楼-- · 2020-02-28 04:53

Change your code, from:

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

To:

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

Method ->update(...) is used for mass updates, check Mass Updates

查看更多
再贱就再见
5楼-- · 2020-02-28 04:55

Trailing data is a Carbon error, it's because you probably use Postgres and your date returns milliseconds.

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

You can add the following method to your (base) model.

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

If you are using TIME WITH TIMEZONE in Postgres then the format should be:

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

查看更多
放我归山
6楼-- · 2020-02-28 05:12

If you are using Postgres you have to add some lines to your Model(s). It happens because of TIME WITH TIMEZONE in Postgres.

Please also read Date Mutators as Laravel already has support for this baked in, simply put below line in your Model to override the default dateFormat for that model: https://laravel.com/docs/5.7/eloquent-mutators#date-mutators

Go to your App/Model (under app folder, exp. User, SomeModel) add below line:

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

Best

查看更多
登录 后发表回答