Eloquent - 使用唯一字符串或唯一int作为id

时间:2014-02-27 10:43:49

标签: php laravel laravel-4 eloquent

对于我的users表,Eloquent允许我使用id increment

$table->increments('id');

这很好。每个新用户都会获得id,1,2,3等

但是,id应该是自动分配的字符串或整数。

我想要

  • 用户不知道有多少用户
  • 用户 id like 至少5位数(47533)或者是唯一的随机字符串(f8hrcrft13)

如何使用Eloquent实现这一目标?

到目前为止我发现了:

$table->string('id', 36)->primary()

3 个答案:

答案 0 :(得分:5)

您可以在创建用户模型时指定ID。

$data = [
    'id' => str_random(10),
    'first_name' => 'Andrej'
];

$user = User::create($data);

但是,这将忽略您默认指定的ID 您需要稍微编辑models/User.php并告诉您不要自动递增 在顶部添加此属性

public $incrementing = false;

不要忘记将users表中的列类型从INT更改为VARCHAR。

答案 1 :(得分:4)

不要更改数据库结构,增加id对于防止错误重复非常重要。

只使用hashid hashid.org

  

从数字中生成短哈希值(如YouTube和Bitly)。

     

模糊数据库ID·将它们用作忘记密码哈希值·邀请码·存储分片号

$hashids = new Hashids\Hashids('this is my salt');
$hash = $hashids->encrypt(1, 2, 3);
$numbers = $hashids->decrypt($hash);

var_dump($hash, $numbers);

返回:

string(5) "laUqtq"

array(3) {
   [0]=>
   int(1)
   [1]=>
   int(2)
   [2]=>
   int(3)
}

答案 2 :(得分:2)

使用其用户名为每个用户制作一个slu ..

example.org/user/john

然后,如果有两个用户使用 john 用户名附加一个计数器来区分它们。

example.org/user/john-1

最终用户不会看到任何ID。这比为每个用户别名分配随机数要简洁得多。

您可以使用https://github.com/cviebrock/eloquent-sluggable

轻松完成此操作