Не работает геттер идентификатора в модели (я использую тип uuid)

Я делаю первичный ключ как uuid в Model.

Миграция с первичным ключом uuid:

Schema::create('brands', function (Blueprint $table) {
    $table->uuid('id')->unique()->primary();
    $table->string('title');
    $table->timestampsTz();
});

Проверка модели:

Psy Shell

>>> $x = App\Models\Brand::find('e025b8aa-c71e-42ca-b87c-7ee27695b83a');
=> App\Models\Brand {#720
  id: "e025b8aa-c71e-42ca-b87c-7ee27695b83a",
  title: "Batman",
  created_at: "2017-04-28 23:51:41+10",
  updated_at: "2017-04-28 23:51:41+10",
}

При обращении к модели она содержит правильные данные.

>>> $x->title
=> "Batman"
>>> $x->id
=> 0

Почему ноль?


person Takamura    schedule 29.04.2017    source источник
comment
Возможный дубликат UUID первичный ключ в модели Eloquent хранится как uuid, но возвращается как 0   -  person Sameer Achanta    schedule 29.04.2017


Ответы (1)


Eloquent имеет некоторые соглашения по умолчанию и, следовательно, имеет некоторые ожидания от вашей модели, таблицы, ограничений и т. д. К счастью, вы можете изменить их:

Из документации Laravel:

Первичные ключи

Eloquent также предполагает, что каждая таблица имеет столбец первичного ключа с именем id. Вы можете определить свойство $primaryKey, чтобы переопределить это соглашение.

Кроме того, Eloquent предполагает, что первичный ключ представляет собой возрастающее целочисленное значение, а это означает, что по умолчанию первичный ключ будет автоматически преобразован в int. Если вы хотите использовать неинкрементный или нечисловой первичный ключ, вы должны установить для публичного свойства $incrementing вашей модели значение false.

По поводу вашего вопроса: "Почему ноль?"

Поскольку Eloquent явно приводит строку "e025b8aa-c71e-42ca-b87c-7ee27695b83a" к значению int, и этот результат равен int 0...

person Rudolf Tucek    schedule 29.04.2017