\App\Models\TraitsHasTimestamps

时间戳统一配置 Trait

职责:所有模型 use 本 Trait 即可获得一致的日期字段映射和序列化格式。

约定: 全库统一使用 create_time / update_time 替代 Laravel 默认的 created_at / updated_at。 JSON 序列化格式固定为 Y-m-d H:i:s,不带毫秒和时区标记。

维护方式($timestamps = false,Eloquent 不自动写这两个字段):

  • create_time:DB 列 DEFAULT CURRENT_TIMESTAMP,插入时自动填,模型无需赋值。
  • update_time:PostgreSQL 没有 ON UPDATE 语法(迁移里的 useCurrentOnUpdate 是无效配置), 目前只有 td_sys_menu / td_sys_config_definition / td_sys_config_value 三张表建了 update_timestamp() 触发器自动维护;其余表靠写入方手动赋值(如 UserConfigService、AuthService), 未手动赋值的表 update_time 不随更新变化——这是已知现状,改动前请知悉。

为什么不开 $timestamps = true 让 Eloquent 自动维护: td_sys_user_dept 等关联表只有 create_time 没有 update_time 列, 且业务在用 SysUserDept::create(),全局开启后 Eloquent 会向这些表写 update_time 直接报 Undefined column。

特例:SysFile(td_sys_files)沿用 Laravel 默认的 created_at/updated_at 列并开启 自动维护($timestamps = true),不走本 Trait(直接 extends Model)。

┌────────────────── 分区导航(按此顺序阅读)──────────────────┐ 分区 1 · 时间戳开关 $timestamps 分区 2 · 日期序列化 serializeDate └────────────────────────────────────────────────────────────┘

Summary

Methods
Properties
Constants
timestampCasts()
$timestamps
No constants found
serializeDate()
No protected properties found
N/A
No private methods found
No private properties found
N/A

Properties

$timestamps

$timestamps

Methods

timestampCasts()

timestampCasts() : array<string,string>

全库统一的时间列 cast 段(单源:约 22 个模型 casts() 内重复的两行)。 使用方模型 casts() 内 `return array_merge(self::timestampCasts(), [...])`。

Returns

array

serializeDate()

serializeDate(\DateTimeInterface  $date) : string

所有日期属性统一按 "年-月-日 时:分:秒" 序列化。

Parameters

\DateTimeInterface $date

Returns

string —