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(),而不是创建一个新方法.
在将它传递给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)
| 归档时间: |
|
| 查看次数: |
2454 次 |
| 最近记录: |