如何在 spatie/laravel-permission 中使用 UUID
How can I use UUID in spatie/laravel-permission
我使用 ramsey/uuid
作为我所有项目表的主键。如何禁用自动递增并允许 roles
和 permissions
主键可填充?我已经设法在其他表上做到了,但我坚持使用这两个。
在 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
我使用 ramsey/uuid
作为我所有项目表的主键。如何禁用自动递增并允许 roles
和 permissions
主键可填充?我已经设法在其他表上做到了,但我坚持使用这两个。
在 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