Встроенная поддержка UUID в качестве первичного ключа в моделях laravel (9+)

Я изменил модель, чтобы использовать UUID вместо возрастающего числа в качестве первичного ключа. Вот миграция:

Schema::create('games', function (Blueprint $table) {
            $table->uuid('id')->primary()->default(DB::raw('(UUID())'));
            $table->foreignUuid('user_id');
            $table->string('title');
});

Я также модифицировал модель, изменив тип ключа на строку вместо стандартного целочисленного типа:


class Game extends Model
{
    use HasFactory, HasApiTokens;

    protected $keyType = 'string';

    protected $fillable = [
        "title",
        "user_id",
    ];
}

но когда я вставляю новую запись с помощью метода create, идентификатор новой записи возвращает 0

$game = Game::create([
    'title' => $request->input('title'),
    'user_id' => $request->user()->id,
]);

dd($game);

Несмотря на то, что в результате для типа ключа задано значение «строка», поле id по-прежнему возвращает 0 (целое число).

Однако, если я проверю запись, созданную в базе данных, идентификатор действительно содержит строку UUID:

Может ли кто-нибудь указать мне, что я делаю неправильно здесь. Я новичок в Laravel. Может быть, я где-то допустил глупую ошибку. Также, пожалуйста, дайте мне знать, если мне нужно прикрепить сюда дополнительные справочные материалы. Спасибо.

Если вы используете laravel 9+, вы можете использовать официально поддерживаемый способ laravel.com/docs/9.x/eloquent#uuid-and-ulid-keys

Arun A S 12.04.2023 10:07

Если вы используете предварительное определение БД, удалите лишнее (), чтобы просто: $table->uuid('id')->primary()->default(DB::raw('UUID()'));

francisco 12.04.2023 16:34

В старые времена вам нужно было установить приращение в false, чтобы оно работало.

mrhn 13.04.2023 00:13
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
193
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ответил в комментариях к посту Арун А.С.

добавление use HasUuids в Game модель устраняет проблему:

//..
use Illuminate\Database\Eloquent\Concerns\HasUuids;
// other directives..

class Game extends Model
{
    use HasFactory, HasApiTokens;
    use HasUuids;

    protected $keyType = 'string';

    protected $fillable = [
        "title",
        "user_id",
    ];
}

Другие вопросы по теме