什么是 uuid

uuid 是“universal unique identifier”的缩写,它是由36个字母或数字字组成的字符串。每个uuid都是唯一的。

uuid 的优势

  1. 对于分布式系统你可以保证主键不会冲突。
  2. 构建大规模应用时使用自增主键不理想
  3. uuid很难仿造,相反根据int自增主键可以仿造用户主键
  4. 可以隐藏你获取用户信息的方式,例如://example.com/user/13/settings。 可以推测是更具id获取用户信息的

laravel 中使用uuid

migrations

// 删除自增主键
$table->increments('id');
// 使用 uuid 类型 注意 laravel5.1 开始支持uuid类型
$table->uuid('id');
// 设置主键
$table->primary('id');

models

// user.php文件

// 移除 Laravel 创建用户时自增主键特性
/**
 * Indicates if the IDs are auto-incrementing.
 *
 * @var bool
 */
public $incrementing = false;

使用 Laravel model event 自动绑定uuid
   /**
     * Boot function from laravel.
     */
    protected static function boot()
    {
        parent::boot();

        static::creating(function ($model) {
            $model->{$model->getKeyName()} = (string) Str::uuid();
        });

最后创建用户

// uuid 自动生成
User::create([
        'name' => 'Jane',
        'email' => 'john@jane.com',
        'password' => bcrypt('password'),
    ]);