php - 如何在 spatie/laravel-permission 中使用 UUID
问题描述
我将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
。
希望这可以帮助。
更新:我写了一篇关于如何在这里实现这一点的博客文章
推荐阅读
- javascript - 循环遍历计算属性 Vue
- android - 第一次没有得到服务器 android volley 的响应
- excel - 当 A 列(帐户代码)相同时,求和 B 列(借方)[Excel]
- java - HttpsURLConnection 的默认请求方法
- vue.js - Vue.js 与 v-model 的双向数据绑定
- java - 改进不同类型的 Iterable 的类型检查
- jquery - ASP.NET Core MVC 引导模式 - 改变内容
- javascript - 在 jquery 中停止其他网络请求
- android - 单个命令可在一个视频中裁剪、动画(效果)和添加图像和文本
- search - 输入搜索关键字后使用drupal搜索获取包含在taxonmoy中的节点数