首页 > 解决方案 > 使用 Laravel 关系 orm 时 UUID 二进制(16)的问题

问题描述

我使用 uuid 作为帐户表的主键,它与角色表有多对多的关系。由于我在 mariadb 中创建了一个名为UuidToBin的函数,我将 uuid 作为二进制(16)存储在数据库中,将 uuid 字符串转换为二进制(16),当我想要获取 uuid 时,我使用另一个函数名称是UuidFromBin,将 uuid 从二进制(16)转换为本文后面的字符串:https ://docs.w3cub.com/mariadb/guiduuid-performance/index 。问题是当我使用 laravel eloquent 关系时我无法检索数据,因为它自动传递帐户表的主键的值以将查询与角色表连接起来,而不是首先调用将 uuid 转换为二进制(16)的函数,以便 mariadb 可以比较。代码关系:

**

public function roles () : BelongsToMany
{
    return $this->belongsToMany(Role::class, 'account_role',
                                'uuid_account', 'id_role');
}

** 查询 laravel 执行:

 select `role`.`id` from `role` inner join `account_role` on `role`.`id` = `account_role`.`id_role` 
    where `account_role`.`uuid_account` = '94cb6c01-3c6d-44fe-b40f-e798bb25d972'

我想要的查询:

    select `role`.`id` from `role` inner join `account_role` on `role`.`id` = `account_role`.`id_role` 
where `account_role`.`uuid_account` = UuidToBin('94cb6c01-3c6d-44fe-b40f-e798bb25d972')

如果有人知道如何修复,或者如果有更好的方法来使用 uuid,请告诉。太感谢了!

标签: phpmysqllaravelormmariadb

解决方案


很快,MariaDB 将有一个名为“UUID”的数据类型,它隐藏 UUID 的打包/解包。

https://jira.mariadb.org/browse/MDEV-26664

现在在 MariaDB 10.7 中试用它,或者等待它成为“通用可用性”。

我的UUID 博客已更新为提及 10.7 并提供了一些关于迁移的提示。


推荐阅读