表題の通りのエラーを解決した忘備録。
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エラーが発生/