我有一个不使用自动增量主键的用户表,而是使用二进制uuid主键。我设置我的自定义模型以与我的表进行交互,但是,我在使用::find()
尝试查找记录时遇到问题,因为对于这样的情况,需要使用HEX()
和{来搜索此uuid {1}} mysql函数。如何覆盖它并让UNHEX()
中的任何内容被剔除。模型的名称是Player。
因此,如果我试图找到一个uuid为::find()
的用户,我无法通过以下方式找到它们:
9d823b9eec224cbea10b69bec2c5adef
因为uuid需要不被解雇。
我已经尝试Player::find('9d823b9eec224cbea10b69bec2c5adef')
而没有结果。
到目前为止,这是我的模型:
Player::find("UNHEX('9d823b9eec224cbea10b69bec2c5adef')");
uuid的数据类型是binary(16)
更新
我已经通过使用class Player extends Eloquent {
protected $table = 'players';
protected $connection = 'game';
protected $primaryKey = 'uuid';
public $incrementing = false;
public $timestamps = false;
}
来实现它,但是每次我需要查找用户时都需要编写很多东西。
我有什么方法可以让Player::find(DB::raw("UNHEX('9d823b9eec224cbea10b69bec2c5adef')"));
的参数始终通过::find()
或通过函数DB::raw("UNHEX('uuid')")
传递?
我100%确定我将始终使用UUID,因此我想覆盖hex2bin()
,而不是创建新方法。
答案 0 :(得分:5)
在将它传递给mysql之前,我会尝试在PHP中取消它:
Player::find(hex2bin('9d823b9eec224cbea10b69bec2c5adef'));
您可以将此方法添加到Player
班级:
public static function findUUID($uuid) {
return self::find(hex2bin($uuid));
}
现在,您可以在项目中的任何位置调用它:
$result = Player::findUUID('9d823b9eec224cbea10b69bec2c5adef');
如果您不想静态声明,可以:
public function findUUID($uuid) {
return self::find(hex2bin($uuid));
}
然后在代码中引用它:
$result = new Player;
$result->findUUID('9d823b9eec224cbea10b69bec2c5adef');
答案 1 :(得分:1)
这应该允许您覆盖本机find()行为而不必使用findUUID():
protected $primaryKey = 'uuid';
public static function find($uuid)
{
return parent::find(hex2bin($uuid));
}
答案 2 :(得分:-1)
如果您真的想要这样,您也可以{/ 1}}使用此
Player::find('9d823b9eec224cbea10b69bec2c5adef')
<强> EDITED 强>
添加了自我,正如用户Elliot Fehr建议的那样