laravel雄辩的特殊UUID主键

dav*_*d33 2 php mysql sql laravel

我有一个不使用自动增量主键的用户表,而是使用二进制uuid主键.我设置我的自定义模型与我的表进行交互但是,我在使用::find()因为这样的情况尝试查找记录时遇到了麻烦,这个uuid需要通过使用HEX()UNHEX()mysql函数进行搜索.如何覆盖它并将其中的任何内容置于::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;


}
Run Code Online (Sandbox Code Playgroud)

uuid的数据类型是binary(16)


更新

我已经通过使用它来工作Player::find(DB::raw("UNHEX('9d823b9eec224cbea10b69bec2c5adef')"));但是每次我需要查找用户时都要编写很多东西.

有什么方法可以让参数::find()始终贯穿DB::raw("UNHEX('uuid')")或通过函数传递hex2bin()

我100%肯定我将永远使用UUID所以我想覆盖::find(),而不是创建一个新方法.

Ell*_*ehr 5

在将它传递给mysql之前,我会尝试在PHP中取消它:

Player::find(hex2bin('9d823b9eec224cbea10b69bec2c5adef'));
Run Code Online (Sandbox Code Playgroud)

您可以将此方法添加到您的Player类:

public static function findUUID($uuid) {

    return self::find(hex2bin($uuid));

}
Run Code Online (Sandbox Code Playgroud)

现在项目中的任何位置都可以称之为:

$result = Player::findUUID('9d823b9eec224cbea10b69bec2c5adef');
Run Code Online (Sandbox Code Playgroud)

如果您不想静态声明它,您可以:

public function findUUID($uuid) {

    return self::find(hex2bin($uuid));

}
Run Code Online (Sandbox Code Playgroud)

然后在您的代码中引用它:

$result = new Player;
$result->findUUID('9d823b9eec224cbea10b69bec2c5adef');
Run Code Online (Sandbox Code Playgroud)