laravel uuid 作为主键

2024-02-29

我正在尝试将 uuid 设置为 Laravel 模型中的主键。我已经完成了在我的模型中设置启动方法的工作here https://github.com/webpatser/laravel-uuid所以我不必每次想要创建和保存模型时都手动创建它。我有一个控制器,它只创建模型并将其保存在数据库中。

它已正确保存在数据库中,但当控制器返回时,id 的值始终返回0。我怎样才能让它真正返回它在数据库中创建的值?

Model

class UserPersona extends Model
{
    protected $guarded = [];

    protected $casts = [
        'id' => 'string'
    ];

    /**
     *  Setup model event hooks
     */
    public static function boot()
    {
        parent::boot();
        self::creating(function ($model) {
            $uuid = Uuid::uuid4();
            $model->id = $uuid->toString();
        });
    }
}

控制器

class UserPersonaController extends Controller
{
    public function new(Request $request)
    {
        return UserPersona::create();
    }
}

您需要更改keyType to string and incrementing to false。因为它没有增加。

public $incrementing = false;
protected $keyType = 'string';

另外我有一个trait我只是将其添加到那些具有 UUID 键的模型中。这非常灵活。这最初来自https://garrettstjohn.com/articles/using-uuid-laravel-eloquent-orm/ https://garrettstjohn.com/articles/using-uuid-laravel-eloquent-orm/针对我在密集使用过程中发现的问题,我对其进行了一些小的调整。

use Illuminate\Database\Eloquent\Model;
use Ramsey\Uuid\Uuid;

/**
 * Class Uuid.
 * Manages the usage of creating UUID values for primary keys. Drop into your models as
 * per normal to use this functionality. Works right out of the box.
 * Taken from: http://garrettstjohn.com/entry/using-uuids-laravel-eloquent-orm/
 */
trait UuidForKey
{

    /**
     * The "booting" method of the model.
     */
    public static function bootUuidForKey()
    {
        static::retrieved(function (Model $model) {
            $model->incrementing = false;  // this is used after instance is loaded from DB
        });

        static::creating(function (Model $model) {
            $model->incrementing = false; // this is used for new instances

            if (empty($model->{$model->getKeyName()})) { // if it's not empty, then we want to use a specific id
                $model->{$model->getKeyName()} = (string)Uuid::uuid4();
            }
        });
    }

    public function initializeUuidForKey()
    {
        $this->keyType = 'string';
    }
}

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

laravel uuid 作为主键 的相关文章

随机推荐

  • Telegram Bot 通过 node.js 实时定位

    如何发送电报机器人实时位置 我在用着node telegram bot api Module Code 此代码仅发送位置 await bot sendLocation msg chat id 35 804819 51 434070 Solv
  • 如何通过 Clap 将所有命令行参数传递给另一个程序?

    我有一个程序foo使用Clap https github com clap rs clap处理命令参数解析 foo调用另一个程序 bar 最近 我决定用户foo应该能够将参数传递给bar如果他们喜欢的话 我添加了bar拍手命令 let ma
  • 在 OpenCL 内核中动态创建本地数组

    我有一个 OpenCL 内核 需要将一个数组作为多个数组进行处理 其中每个子数组总和都保存在本地缓存数组中 例如 想象一下捕鸟数组 1 2 3 4 10 30 1 23 每个工作组都有一个数组 在示例中我们有 2 个工作组 每个工作项处理两
  • AngularJS Internet Explorer 9

    我在使用 AngularJS 和 Internet Explorer9 时遇到了一些小问题 看起来 angularjs 没有正确加载 如果我用我的应用程序启动 ie 则什么都不会工作 但如果我启动 ie9 的开发工具并刷新页面 我的应用程序
  • 在打字稿中递归地转换对象树的所有叶子

    给定一个简单的对象树 其中包含其自身类型的值或需要转换的类型的值 interface Tree
  • C++ 编译器如何如此快速地计算递归 constexpr 函数?

    我一直在学习C constexpr函数 我实现了constexpr递归函数查找第 n 个斐波那契数 include
  • 错误的文件描述符错误

    如果我尝试执行以下代码 f file test rb fout file test out wb for i in range 10 a f read 1 fout write a f close f fout f seek 4 print
  • 在 d3.js 中显示/隐藏图层

    首先 我是 d3 js 的新手 我有一张地图 上面显示了一些点 现在我想添加按钮来显示 隐藏点 到目前为止我所拥有的 function checkAll d3 selectAll g attr visibility visible func
  • Powershell:使用哈希表替换字符串

    好的 我已经设置了一个哈希表 其中名称是要替换的内容 键是要替换的内容 如下所示 r dog canine cat feline eric eric cartman 接下来我应该做什么 我试过这个 Get Content C scripts
  • 使用 Java 8 枚举 K 元素的组合

    给定一个实例List
  • 使用 Javascript 的 Diffie-Hellman 密钥交换有时会出错

    看完这个视频后http youtu be 3QnD2c4Xovk http youtu be 3QnD2c4Xovk 我一直试图一步一步地遵循它 但未能产生相同的结果 值得注意的是 当我尝试执行 Math pow 3 54 17 时 我得到
  • 不使用 getUserMedia 进行声音分析

    我正在尝试分析浏览器的音频输出 但我不希望出现 getUserMedia 提示 它要求麦克风许可 声源是 SpeechSynthesis 和 Mp3 文件 这是我的代码 return navigator mediaDevices getUs
  • 从 Ansible play 管理 Docker 容器

    我正在编写我的第一本 Ansible 剧本 需要一些指导 我有一个由 3 个虚拟机组成的简单网络 ansible01 我的 Ansible 服务器 Ubuntu db01 一个数据库 同样 Ubuntu myapp01 托管 Java 应用
  • 如何删除 GCC 4.6 中的警告:“缺少初始化程序 [-Wmissing-field-initializers]”?

    The code GValue value 0 给出以下警告 缺少初始化程序 Wmissing field initializers 我知道那是一个GCC bug https stackoverflow com questions 1538
  • 每个Python函数最后都必须返回吗? [复制]

    这个问题在这里已经有答案了 所以我正在制作递归函数的图表来让我的头脑围绕递归 我注意到显然每个函数都在最后执行 return 还有一个问题 函数到底返回什么 传递给它的所有参数 假设有多个参数 或者某种价值 t只是执行实际绘图的实体 def
  • 是否可以使用 django 模型将数组存储在 mysql 数据库中?

    我有一个值数组并想存储在mysql数据库使用django模型 py 我可以通过哪些方式存储数组值 在 的帮助下django mysql我们可以将列表存储到数据库中 为此你必须安装 django mysql pip install djang
  • 如何使用 ggplot2 在直方图条上显示百分比标签

    我看到很多关于将 y 轴上的计数转换为百分比的问题 但其中必须在条形图中 我想在直方图中做类似的事情 但无法清楚地显示条形图上的标签 请告诉我我哪里做错了 x runif 100 min 0 max 10 data1 lt data fra
  • 从 .git 文件夹恢复整个项目[重复]

    这个问题在这里已经有答案了 我有一个网络项目 我已经工作了一段时间了 我使用 GIT 和 SourceTree 来跟踪更改 但愚蠢地没有适当的备份 我有大约 50 次提交 想要清理干净并从新的初始状态开始 所以我删除了 git 文件夹 但是
  • 强类型 ActionLink 的注意事项

    我一直在尝试查找有关 Futures 中首次亮相的强类型 ActionLink 辅助方法的更多信息 我知道使用它有一些很大的缺点 但想了解更多 我发现的最好的链接是这个 Asp Net MVC 2 中的强类型 ActionLink http
  • laravel uuid 作为主键

    我正在尝试将 uuid 设置为 Laravel 模型中的主键 我已经完成了在我的模型中设置启动方法的工作here https github com webpatser laravel uuid所以我不必每次想要创建和保存模型时都手动创建它