Laravel+PostgreSQLでtimestampのあるテーブルデータがCarbonのtrailing dataエラーが出てしまう解決の備忘録


表題の通りのエラーを解決した忘備録。

CREATE TABLE 社員s (
    id SERIAL PRIMARY KEY,
    user_id integer NOT NULL,
    updated_time timestamp without time zone NOT NULL DEFAULT now(),
以下略・・・

みたいなテーブルにおいて、
モデルでは、更新日時カラムをlaravelのデフォルトから変更して

class Staffs extends Model
{
    const UPDATED_AT = 'updated_time';
    const CREATED_AT = 'updated_time';

みたいにカラムを指定している。。。

これを表示したり保存したりしようとすると。。。

"message": "Trailing data",
    "exception": "InvalidArgumentException",
    "file": "/var/www/app/api/vendor/nesbot/carbon/src/Carbon/Carbon.php",
    "line": 910,

こんなエラーがでる

const UPDATED_AT = null;
const CREATED_AT = null;

にすればエラーは出ないが、保存時にタイムスタンプが自動更新されない。
SQLを書けばいいんだけど、案件的な事情でLaravelの自動保存を使いたい。

ネットで示されている解決法

protected $dateFormat = 'Y-m-d H:i:s.u'; 

とか、

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

みたいにデータ型を指定しても、うまくいかない・・・
Y-m-d H:i:sPとかY-m-d H:i:s0とかもダメ。
Y-m-d H:i:sでもうまくいかない。なんでや

解決策

世界には必ず同じエラーで困っている人がいる!!

Carbon trailing data for dates with timezone #16839

Traitを作るしか無いようだ

このように、データ型を見てCarbonへ渡すデータを調整するtraitを作成して、useすれば解決した。

原因(よくわからん)

古いlaravel or Posgres or Carbonの仕様なんだろうか・・・?
特に理由がない限りは最新版のパッケージを使いたい

よくわからんが動いているのでヨシ!!!状態なので

根本的な原因について分かる人はコメントください・・・

似たエラーやこの辺の仕様、解決URL

https://www.suzu6.net/posts/164-laravel-createat-updateat/
https://yoo-s.com/topic/detail/788
https://laracasts.com/discuss/channels/laravel/carbon-trailing-data-error?page=0
https://toriyaru.com/2020/01/09/laravel6のtimestamp型のデータでtrailing-dataエラーが発生/