为什么 Eloquent(在 Laravel 中)将我的 varchar uuid 主键转换为整数导致错误?

Why does Eloquent (in Laravel) cast my varchar uuid primary key to an integer resulting in errors?

在我昨晚的 之后,我睡了个好觉 "discovered" 发生这种情况是由于自动转换/类型转换或其他原因。

求和:

型号

<?php namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Address extends Model {

    protected $table = 'Addresses';
    protected $fillable = ['uuid', 'zipCode', 'houseNumber'];
    protected $primaryKey = 'uuid';
    //public $incrementing = false;
}

控制器(搞砸了)

public function store(Request $request) {
    $input = $request->all();
    $address = Address::create($input);
    var_dump($address); exit;

//result (as expected)

    $address = $address->fresh();
    var_dump($address); exit;

//result (as expected)

var_dump($address->uuid); exit;//result (wow): int(0)
}

为了让它工作,我必须手动覆盖模型中主键的转换类型。

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

给后来来这里的人。您可以使用以下字符串类型覆盖模型中的 $keyType 变量:

protected $keyType = 'string';

我查看了 \Illuminate\Database\Eloquent\Model class,发现最有效的方法是在您的模型中设置 $incrementing = false

在我的测试中,创建和检索模型都按预期工作。

这是带有 PHP 文档评论的片段。

    /**
     * Indicates if the IDs are auto-incrementing.
     *
     * @var bool
     */
    public $incrementing = false;