У меня есть таблица базы данных postgres, которая использует uuid в качестве своего первичного ключа, через webpatser / Laravel-UUID пакет и «читаемые» веб-идентификаторы через vinkla / hashids.
Когда я запрашиваю базу данных, если я дд () ответ, я вижу UUID в полном объеме, но если я просто вернуть, Я вместо этого получаю целое число.
Предположим, я упустил что-то очевидное, поэтому:
миграция
$table->uuid('id');
$table->string('web_id');
$table->primary('id');
модель
public function store()
{
$data = [
'id' => Uuid::generate(4)->string,
'web_id' => Hashids::encode(mt_rand(1,1000000)),
Я предполагаю, что что-то происходит, когда данные приводятся в json, но я не уверен, с чего бы я начал заниматься этим …
Я также вижу такое же поведение у ремесленника, повозиться, fwiw:
>>> $result = App\Model::firstOrFail()
=> App\Model {#675
id: "587bb487-881d-417e-8960-fbecaa3b270b",
web_id: "Mxqv4LYP",
created_at: "2016-01-25 15:52:25+00",
updated_at: "2016-01-25 15:52:25+00",
}
>>> $result->id
=> 587
Eloquent предполагает, что первичный ключ (который названный id
по умолчанию) является целым числом, и int
по умолчанию в getCasts
метод:
public function getCasts()
{
if ($this->incrementing) {
return array_merge([
$this->getKeyName() => 'int',
], $this->casts);
}
return $this->casts;
}
Это можно перезаписать, указав, что первичный ключ не увеличивается автоматически, добавив его в вашу модель:
$incrementing = false;
Или путем наложения id
столбец к string
в $casts
Свойство модели, вот так:
protected $casts = [
'id' => 'string'
]
Как описано в Eloquent: кастинг атрибутов документация.
Других решений пока нет …