php - 使用 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,请告诉。太感谢了!
解决方案
很快,MariaDB 将有一个名为“UUID”的数据类型,它隐藏 UUID 的打包/解包。
https://jira.mariadb.org/browse/MDEV-26664
现在在 MariaDB 10.7 中试用它,或者等待它成为“通用可用性”。
我的UUID 博客已更新为提及 10.7 并提供了一些关于迁移的提示。
推荐阅读
- r - Customize legend in R using ggplot2
- iot - Google Assist 集成 - 没有云功能的本地 SDK
- tensorflow - 在 Tensorflow 2 中重置图形
- php - ajax选择具有多个相关数据的数据
- javascript - 将鼠标悬停在每个单词上时显示图像
- node.js - 强制项目使用 Yarn 但不使用 npm
- apache-kafka - 如何使用 Jmx 查询检索 Kafka 节点的 IP 地址?
- wordpress - Wordpress:如何覆盖或删除子主题中的插件功能?
- javascript - 向 multer-s3 路由发送 POST 请求时出现 500 错误
- r - 试图理解 R 中的 rlang sym(id) 错误