Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为模型生成唯一的随机ID_Php_Laravel 5.4 - Fatal编程技术网

Php 为模型生成唯一的随机ID

Php 为模型生成唯一的随机ID,php,laravel-5.4,Php,Laravel 5.4,我对Laravel很陌生,所以请对我放轻松:)我正在努力找出为模型生成唯一随机ID的最有效方法。这个ID应该有6个字符长,所以我将使用mt_rand(1000099999)创建它。我想做的是创建模型,生成ID,检查它是否真正唯一,然后根据模型保存它 我已经看过观察家们这样做了,但是在创作活动的背后加上这个标签似乎有点冗长。有没有其他方法或方法可以在不创建多个文件的情况下调用观察者 克里斯。如果你想要真正独一无二的ID,我会调查UUID,以确保你永远不会得到任何重复的ID。我建议使用此软件包: 通

我对Laravel很陌生,所以请对我放轻松:)我正在努力找出为模型生成唯一随机ID的最有效方法。这个ID应该有6个字符长,所以我将使用
mt_rand(1000099999)
创建它。我想做的是创建模型,生成ID,检查它是否真正唯一,然后根据模型保存它

我已经看过观察家们这样做了,但是在创作活动的背后加上这个标签似乎有点冗长。有没有其他方法或方法可以在不创建多个文件的情况下调用观察者


克里斯。

如果你想要真正独一无二的ID,我会调查UUID,以确保你永远不会得到任何重复的ID。我建议使用此软件包:


通过这样做,您可以轻松地使用它生成UUID:
UUID::generate(4)这将确保它确实是随机的。

啊,对了,设法解决了这个问题:)

因此,我没有使用事件,而是扩展了模型引导方法,因为这是连接到模型事件的另一种方式-

protected static function boot () {

    // run our parent boot
    parent::boot();

    // hook onto our creating method
    static::creating(function($model) {
        /** @var $model Candidate */
        $model->_generateAccessCode();
    });
}
然后,这会告诉模型,当创建一个新的访问代码时(使用
creating
事件),将生成一个新的访问代码

然后,我将_generateAccessCode()方法添加到模型中-

/**
 * Called on Candidate model creation
 * @return void
 */
private function _generateAccessCode () {

    // make sure our value is unique by checking it doesn't exist already
    while(empty($this->access_code) || self::findByAccessCode($this->access_code, ['id'])) {
        $this->access_code = mt_rand(100000, 999999);
    }
}
它引用另一个方法来验证访问代码是否不存在-

/**
 * Retrieve a candidate by access code
 * @param int $code 6 digit access code
 * @param array $columns Array of columns
 * @return mixed
 */
public static function findByAccessCode ($code, $columns = []) {

    if(count($columns) < 1) $columns = null;

    // get our candidate by access code
    $candidate = Candidate::where('access_code', '=', $code)->first($columns);

    // return our candidate
    return $candidate;
}
/**
*通过访问代码检索候选人
*@param int$代码6位访问代码
*@param array$columns列数组
*@返回混合
*/
公共静态函数findByAccessCode($code,$columns=[])){
如果(计数($columns)<1)$columns=null;
//通过访问代码获取我们的候选人
$candidate=candidate::其中('access_code','=',$code)->first($columns);
//让我们的候选人回来
返回$candidate;
}

为@Templar干杯,但我更关注的是如何根据创建模型自动设置,而不是创建唯一ID的机制。有什么想法吗?@Chris Nope,我不知道如何设置,因为我以前没有与laravel合作过很多。更像一个symfony的家伙。