Laravel 8 修改User表created_at、updated_at字段名迁移不生效怎么办
问题原因
你在模型中定义的CREATED_AT和UPDATED_AT常量仅作用于Eloquent ORM的运行时逻辑,作用是告知模型在读写时间戳字段时匹配你自定义的字段名,不会影响数据库迁移生成表结构的逻辑。Laravel迁移文件中的$table->timestamps()方法默认会固定生成created_at和updated_at两个字段,和模型配置完全独立。
解决步骤
- 调整迁移文件逻辑
- 若还未运行过用户表迁移:直接打开
database/migrations/目录下的用户表迁移文件,删除默认的$table->timestamps();代码,替换为你自定义的时间戳字段声明:
调整完成后执行// 替换原有 $table->timestamps() $table->timestamp('registered_on'); $table->timestamp('modify_on')->nullable();php artisan migrate即可生成对应字段。 - 若已经运行过迁移生成了用户表:优先新建字段修改迁移避免数据丢失,先执行命令生成迁移文件:
打开生成的迁移文件,编写上下线逻辑:php artisan make:migration rename_timestamp_columns_on_users_table
字段重命名需要依赖public function up() { Schema::table('users', function (Blueprint $table) { $table->renameColumn('created_at', 'registered_on'); $table->renameColumn('updated_at', 'modify_on'); }); } public function down() { Schema::table('users', function (Blueprint $table) { $table->renameColumn('registered_on', 'created_at'); $table->renameColumn('modify_on', 'updated_at'); }); }doctrine/dbal包,先执行composer require doctrine/dbal安装依赖,再执行php artisan migrate即可完成字段修改。
- 若还未运行过用户表迁移:直接打开
- 保持现有模型配置
你当前User模型中定义的两个常量配置是正确的,无需额外修改,后续Eloquent执行数据写入、更新操作时会自动映射到你自定义的两个字段上。
内容的提问来源于stack exchange,提问作者TikkaMasala
相关产品推荐
相关产品推荐

