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

Laravel migrate删除created_at列后调用timestamps报重复列错误如何解决

报错原因

Laravel处理同一个Schema::table闭包内的表结构修改逻辑时,会优先执行所有字段新增、修改操作,最后再执行字段删除操作,和你编写代码的先后顺序无关。
你写的代码虽然先声明删除created_at,再调用timestamps()新增时间戳字段,但实际生成的SQL执行顺序是先执行add created_at、add updated_at,再执行drop created_at,所以会触发字段重复的报错。

正确实现方案

将删除操作和新增操作拆分到两个独立的Schema::table闭包中即可,每个独立闭包会作为单独的SQL批次按顺序执行,保证删除操作完成后再执行新增操作:

// 第一个闭包先执行字段删除
Schema::table('cms_myterms', function (Blueprint $table) {
    $table->dropColumn('created_at');
});

// 第二个闭包再新增时间戳字段
Schema::table('cms_myterms', function (Blueprint $table) {
    $table->timestamps();
});

如果原表中还存在旧的updated_at字段需要同步删除,只需要在第一个闭包的dropColumn参数里加上对应字段即可:

$table->dropColumn(['created_at', 'updated_at']);

内容的提问来源于stack exchange,提问作者TreeStreetCat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 06:36:08