Как я могу использовать UUID в разрешении spatie / laravel - PullRequest
0 голосов
/ 21 ноября 2018

Я использую ramsey/uuid в качестве первичного ключа для всех моих таблиц проекта.Как отключить автоинкремент и разрешить заполнение первичного ключа roles и permissions?Мне удалось сделать это на других столах, но я застрял с этими двумя.

1 Ответ

0 голосов
/ 21 ноября 2018

Создайте папку в app с именем Traits.Там создайте файл Uuids.php.

Добавьте следующий код в Uuids.php;

<?php

namespace YourNamespace;

use Illuminate\Support\Str;

trait Uuids
{
    /**
    * Boot function from Laravel
    */
    protected static function boot()
    {
        parent::boot();

        static::creating(function ($model) {
            $model->incrementing = false;
            $model->{$model->getKeyName()} = Str::uuid()->toString();
        });
    }
}

Тогда в вашем файле миграции у вас должно быть что-то вроде:

$table->uuid('id')->primary(); для замены $table->increments('id');

Не забудьте использовать черту Uuids, как в своих моделях;

<?php

namespace YourNamespace;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    use Uuids;

    protected $guarded = [''];
    protected $casts = [
        'id' => 'string',
    ];
...

Перед изменением столбца обязательно добавьтеdoctrine/dbal зависимость от вашего файла composer.json.Библиотека Doctrine DBAL используется для определения текущего состояния столбца и создания запросов SQL, необходимых для внесения указанных изменений в столбец:

composer require doctrine/dbal

Далее вы создаете файл миграции;

php artisan make:migration change_primary_key_type_in_roles_table --table=roles затем в вашем файле миграции.Вы делаете это, например.

public function up()
{
    Schema::table('roles', function (Blueprint $table) {
        $table->uuid('id')->change();
    });
}

public function down()
{
    Schema::table('roles', function (Blueprint $table) {
        $table->increments('id')->change();
    });
}

Не забудьте сделать composer dumpautoload.

Надеюсь, это поможет.

ОБНОВЛЕНИЕ: Я написал сообщение в блоге о том, как этого добиться здесь

...