laravel 5.6 id自动转换为int

时间:2018-03-21 16:18:20

标签: laravel casting laravel-5.6

我使用具有以下表结构的Laravel 5.6:

public function up() {
        Schema::create( 'traffic', function ( Blueprint $table ) {
            $table->string( 'id' );
            $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' );
            $table->integer( 'delay' )->comment( 'in seconds' );
            $table->decimal( 'position_lat', 10, 8 );
            $table->decimal( 'position_lon', 10, 8 );
            $table->timestamps();
})

当我转储单个记录时,laravel已将id字段转换为整数:

Traffic {#351 ▼
  #casts: array:1 [▶]
  #connection: "mysql"
  #table: null
  #primaryKey: "id"
  #keyType: "int"
  +incrementing: false
  #with: []
  #withCount: []
  #perPage: 15
  +exists: true
  +wasRecentlyCreated: false
  #attributes: array:13 [▼
    "id" => 3
    "category_id" => 6
    "magnitude_id" => 3
    "start_id" => 1898
    "destination_id" => 1898
    "locale_id" => 3
    "length" => 3650
    "delay" => 3061
    "position_lat" => "5.27669000"
    "position_lon" => "51.85458000"
    "created_at" => "2018-03-21 15:55:13"
    "updated_at" => "2018-03-21 15:55:13"
    "name" => "nl"
  ]
  #original: array:13 [▶]
  #changes: []
  #dates: []
  #dateFormat: null
  #appends: []
  #dispatchesEvents: []
  #observables: []
  #relations: []
  #touches: []
  +timestamps: true
  #hidden: []
  #visible: []
  #fillable: array:10 [▶]
  #guarded: array:1 [▶]
}

在我的模型中,我添加了以下内容而没有任何运气:

class Traffic extends Model {

    protected $casts = [
        'id' => 'string'
    ];

根据我迄今为止发现的内容,这应该是将id字段转换为字符串类型的方法。所以我要么做错了,要么就是这个错误。 关于如何解决这个问题的任何想法?

我知道如果我创建了一个整数字段id或者将当前字段重命名为其他字段,那么它可能会被解决。但我希望有更好的解决方案。

1 个答案:

答案 0 :(得分:4)

ZeroOne所述:

  

你有没有添加这个公共$ incrementing = false; ..需要禁用i   认为

这对我有用。