【发布时间】:2025-12-24 09:15:18
【问题描述】:
我有一个用户表,它不使用自动递增主键,而是使用二进制 uuid 主键。我设置了我的自定义模型以与我的表交互但是,我在尝试使用 ::find() 查找记录时遇到了麻烦,因为对于这样的情况,需要使用 HEX() 和 UNHEX() mysql 函数来搜索这个 uuid .我如何覆盖它并让::find() 中的任何内容被十六进制。模型名称为 Player。
因此,如果我要尝试查找 uuid 为 9d823b9eec224cbea10b69bec2c5adef 的用户,我无法通过以下方式找到他们:
Player::find('9d823b9eec224cbea10b69bec2c5adef') 因为 uuid 需要取消十六进制。
我试过Player::find("UNHEX('9d823b9eec224cbea10b69bec2c5adef')");,但没有结果。
到目前为止,这是我的模型:
class Player extends Eloquent {
protected $table = 'players';
protected $connection = 'game';
protected $primaryKey = 'uuid';
public $incrementing = false;
public $timestamps = false;
}
uuid 的数据类型是 binary(16)
更新
我已经使用Player::find(DB::raw("UNHEX('9d823b9eec224cbea10b69bec2c5adef')")); 让它工作,但是每次我需要查找用户时都要写很多。
有什么方法可以让::find() 的参数始终通过DB::raw("UNHEX('uuid')") 运行或通过函数hex2bin() 传递?
我 100% 确定我将始终使用 UUID,因此我想覆盖 ::find(),而不是创建新方法。
【问题讨论】:
-
如果你不介意,你能告诉我如何在 laravel 5 中实现 'uuid' 作为主键。我在做同样的事情时遇到了一些麻烦。我在这个帖子中阐明了我的问题:*.com/questions/31817067/…