如何在Laravel中生成不带连字符的UUID?
Laravel 生成无连字符UUID的实现方案
Laravel默认通过内置工具生成的UUID为带4个连字符的标准格式,例如51a0cb84-8b3d-43c4-bfd4-8fcef1f360d4,若需要输出无任何连字符的32位格式(如51a0cb848b3d43c4bfd48fcef1f360d4),可通过以下方案实现:
推荐方案:通过UUID原生方法直接获取
Laravel底层UUID生成逻辑本身提供了直接提取无连字符16进制值的方法,无需额外做字符串处理,性能和准确性都更优:
use Illuminate\Support\Str; // 直接生成无连字符的UUID $uuidWithoutHyphen = Str::uuid()->getHex()->toString();
getHex()方法会直接返回UUID的原始16进制存储值,输出即为不带任何连字符的32位字符串,和标准UUID的字符内容完全一致,仅移除了格式化用的连字符。
备选方案:对标准UUID做字符串替换
如果需要兼容旧版本逻辑,也可以直接对生成的带连字符UUID做连字符移除操作:
use Illuminate\Support\Str; // 方法1:直接用PHP原生字符串替换 $uuidWithoutHyphen = str_replace('-', '', Str::uuid()->toString()); // 方法2:用Laravel字符串辅助类实现 $uuidWithoutHyphen = Str::of(Str::uuid()->toString())->remove('-');
适配Eloquent模型UUID主键场景
如果是在模型中使用HasUuids trait自动生成UUID作为主键,需要默认输出无连字符格式的话,可以重写模型的generateUuid方法:
namespace App\Models; use Illuminate\Database\Eloquent\Concerns\HasUuids; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Str; class TestModel extends Model { use HasUuids; // 重写默认UUID生成逻辑 protected function generateUuid() { return Str::uuid()->getHex()->toString(); } }
内容的提问来源于stack exchange,提问作者Amr
相关产品推荐
相关产品推荐

