如何在spatie/laravel权限中使用UUID



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

app中创建一个名为Traits的文件夹。在那里,创建一个文件Uuids.php

将以下代码添加到Uuids.php

<?php
namespace YourNamespace;
use IlluminateSupportStr;
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 IlluminateDatabaseEloquentModel;
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

希望这能有所帮助。

更新:我写了一篇关于如何在这里实现的博客文章

最新更新