web-dev-qa-db-ja.com

Laravelモデルを保存するときのモデルの後続データ

私はこのようなコードを持っています

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

データを保存または更新できません。UpdateおよびSave関連行を削除すると、テキストを印刷できます。

これは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 [▶]
}
_

私はこのエラーフォームも取得しましたlaravel 5.6 it

_InvalidArgumentException
Trailing data
_
10

後続データはCarbonエラーです。これは、おそらくPostgresを使用していて、日付がミリ秒を返すためです。

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

(ベース)モデルに次のメソッドを追加できます。

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

PostgresでTIME WITH TIMEZONEを使用している場合、形式は次のようになります。

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

15

Postgresを使用している場合は、モデルにいくつかの行を追加する必要があります。 PostgresのTIME WITH TIMEZONEが原因で発生します。

Laravelはすでにこのベークインをサポートしているので、Date Mutatorsも読んでください。モデルのデフォルトのdateFormatをオーバーライドするには、モデルの行の下に単に入力してください: https:/ /laravel.com/docs/5.7/eloquent-mutators#date-mutators

アプリ/モデル(appフォルダー、exp。User、SomeModel)に移動し、次の行を追加します。

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

ベスト

次のコードからコードを変更します。

$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';

メソッド-> update(...)は大量更新に使用されます 大量更新 を確認してください

1
Aleksa Nikolic

データベースがPostgresでフィールドがタイムスタンプの場合、Carbonはデフォルトの形式(ミリ秒なし)に変換できないことがあります。

ミリ秒が不要な場合は、フィールドの内容を更新してミリ秒部分を含めないようにします。

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

これにより、ミリ秒なしでタイムスタンプ付きフィールドが正規化されます。

0
Marcos Regis

同じ問題がありますが、列名をcreation_dateに変更しました。問題は解決しました。

0
Test Check