我使用uuid作为帐户表的主键,它与角色表有很多关系。我在数据库中将uuid存储为二进制(16),这是由于我在mariadb中创建了一个名为UuidToBin的函数,将uuid字符串转换为二进制(16),当我想获得uuid时,我使用另一个函数名UuidFromBin将uuid从二进制(16)转换成字符串,后面跟着本文:https://docs.w3cub.com/mariadb/guiduuid-performance/index。问题是,当我使用laravel雄辩关系时,我无法提取数据,因为它自动传递帐户表的主键值,与角色表连接查询,而不是首先调用将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,请告诉。非常感谢!
发布于 2021-11-06 20:09:13
不久,MariaDB将有一个名为"UUID“的数据类型,它隐藏了UUID的打包/解压。
https://jira.mariadb.org/browse/MDEV-26664
现在在MariaDB 10.7中对它进行实验,或者等待它成为“通用可用性”。
我的已经更新,提到了10.7,并给出了一些迁移的提示。
https://stackoverflow.com/questions/69856817
复制相似问题