LoginSignup
1
1

More than 1 year has passed since last update.

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

Posted at

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

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,

こんなエラーがでる:weary:

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でもうまくいかない。なんでや:cry:

解決策

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

Carbon trailing data for dates with timezone #16839

Traitを作るしか無いようだ

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

原因(よくわからん)

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

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

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

似たエラーやこの辺の仕様、解決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エラーが発生/

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1