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

Laravel 5.6中traffic表string类型ID被自动转为int问题咨询

解决Laravel 5.6中traffic表id字段被自动转为int类型的问题

这问题我之前在Laravel 5.x版本里也碰到过,核心原因是Laravel框架默认会把名为id的字段当成自增整数主键来处理,哪怕你在迁移里明确定义了string类型,框架的默认行为也会覆盖你的设置。解决起来分两步走:

1. 修改迁移文件,明确设置string类型主键

打开你的traffic表迁移文件,把原来的$table->string('id');改成下面的代码,明确指定该字段为主键且类型是字符串:

public function up() {
    Schema::create( 'traffic', function ( Blueprint $table ) {
        $table->string( 'id' )->primary(); // 关键:添加->primary()明确主键类型
        $table->unsignedInteger( 'category_id' );
        $table->unsignedInteger( 'magnitude_id' );
        $table->unsignedInteger( 'start_id' )->nullable();
        $table->unsignedInteger( 'destination_id' )->nullable();
        $table->unsignedInteger('locale_id');
        $table->integer( 'length' )->comment( 'in metres' );
        // 你的其他字段定义...
    });
}

2. 在对应模型中关闭自增并指定主键类型

找到Traffic模型文件(通常在app/Traffic.php),添加两个属性告诉Laravel这个主键不是自增的,且类型为字符串:

class Traffic extends Model
{
    // 关闭主键自增
    public $incrementing = false;
    // 指定主键类型为字符串
    protected $keyType = 'string';
    
    // 模型的其他代码...
}

额外注意事项

如果已经执行过迁移导致数据库里的id字段已经是int类型,需要先回滚迁移:

php artisan migrate:rollback

然后修改迁移文件后重新执行迁移:

php artisan migrate

这样就能确保id字段在数据库里是string类型,同时模型层也能正确识别主键类型,避免类型转换问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:44:12