【发布时间】:2020-09-18 20:15:49
【问题描述】:
在我昨晚的question 之后,我睡得很好,并“发现”这是由于自动转换/类型转换或其他原因造成的。
总结:
- 模型使用
uuid作为主键 - 他们在从 mySQL 插入时通过
trigger获取它们 - 为了得到数据库运行时生成的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;
}
控制器(搞砸的地方)
public function store(Request $request) {
$input = $request->all();
$address = Address::create($input);
var_dump($address); exit;
$address = $address->fresh();
var_dump($address); exit;
var_dump($address->uuid); exit;//result (wow): int(0)
}
【问题讨论】:
-
您确定该字段在数据库中有值吗?在您的第一个转储中它是空的。
-
@aynber 是的,我确定,请参考 uuid 上方的
var_dump()1 行。如果 uuid 不以 0 开头,则返回该整数(例如 2),因此它始终返回在uuid中遇到的第一个int -
可能是this is the answer?我认为你可以覆盖它。
-
@alariva 很好的调用,但是在调用
fresh()之后它现在返回null而不是预期的对象,就像将public $incrementing设置为false时一样。我认为这是fresh()函数中的一个错误。 -
是的,我的意思是 处理 模型键的 uuid 以避免该类型转换问题。然而,从这一点开始,我认为它需要更多的研究:)
标签: php laravel-5 eloquent uuid type-conversion