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
相关产品推荐
相关产品推荐

