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

标签 php laravel-5 eloquent uuid type-conversion

跟进我昨晚的 question ,我睡了个好觉,并“发现”这是由于自动转换/类型转换或其他原因造成的。

求和:

  • 模型使用uuid作为主键
  • 他们在从 mySQL 插入时通过 触发器 获取它们
  • 为了获取数据库运行时生成的 uuid,我调用了 $model_object->fresh(); fresh()
  • 这在获取整个对象时有效,但在仅选择一个属性时无效

型号

<?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;
}

Controller (搞砸的地方)

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'
];

关于php - 为什么 Eloquent(在 Laravel 中)将我的 varchar uuid 主键转换为整数导致错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40873971/

相关文章:

PHP 类 : referenced variable in one method affects non-referenced variable in other method

Laravel 5 : multi-model middleware "Owner"

php - Laravel 5.1 通过急切加载返回连接字段

php - Laravel 数据透视表在数据库中为空

laravel - Laravel 不允许更新属性

php - 单击时将日期和时间保存到 mysql

php - Laravel groupBy 列并根据数量列添加总计

php - 更新和插入数组等

php - Laravel Pivot 表 Eloquent 关系

Laravel 5.2 和收银员