Laravel 5.1 - 保存到数据库时生成唯一的10个字母数字字符代码

And*_*mes 1 php uniqueidentifier laravel laravel-5.1

我正在使用Laravel 5.1并将壁虎保存到数据库中.我的store方法代码如下:

public function store(GeckoRequest $request)
{
    $user_id = Auth::user()->id;
    $input = $request->all();

    $input['genetics'] = json_encode($input['genetics'], JSON_FORCE_OBJECT);
    $input['user_id'] = $user_id;

    Gecko::create($input);

    $name = str_replace(' ', '-', $request['name']);

    flash()->success('Success!', 'Your gecko has been added to the system');
    return redirect()->action('GeckoController@show', [$name]);

}
Run Code Online (Sandbox Code Playgroud)

我知道我可以做$input['uid'] = str_random(10);- 但我如何确保它实际上是唯一的,如果不是唯一的话,它不会重定向回我的表格?

是否有适当的做法来实现这样的事情?

Mik*_*ler 7

创建一个生成10位随机密钥的函数,然后将其传递给具有唯一规则集的验证器.如果验证器给出错误,请重新运行相同的函数以生成新函数

public function randomId(){

     $id = str_random(10);

     $validator = \Validator::make(['id'=>$id],['id'=>'unique:table,col']);

     if($validator->fails()){
          return $this->randomId();
     }

     return $id;
}
Run Code Online (Sandbox Code Playgroud)