You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 09:24:01