如何在 spatie/laravel-permission 中使用 UUID

How can I use UUID in spatie/laravel-permission

我使用 ramsey/uuid 作为我所有项目表的主键。如何禁用自动递增并允许 rolespermissions 主键可填充?我已经设法在其他表上做到了,但我坚持使用这两个。

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

希望这对您有所帮助。

更新: 我写了一篇博客 post 如何实现这个 here