首页 > 解决方案 > Laravel 使用 slug 进行独特验证

问题描述

我有两个选择,要么用户提供自定义的 unique_id,然后我通过Str::slug($request->custom)它进行转换,要么通过它生成Str::random(6)

我的代码:

$post = new Post;
$unique_id = Str::random(6);
$idcustom = Str::slug($request->custom);

$this->validate($request, [
   'custom'     => 'max:25|string|unique:posts,unique_id' . Str::slug($post->unique_id),
]);

如果用户创建自定义 id,$idcustom则插入到数据库中,如果他只是将字段留空,则$unique_id插入。但是,如果已经有一个条目,例如“堆栈溢出”,我会收到一个 SQL 错误,表明已经有一个具有该名称的条目,但如果它像“stackoverflow”,它应该像它应该的那样工作。所以它与蛞蝓有关,我在这里做错了什么?

标签: phplaravel

解决方案


我认为您不能将“后备”值放入验证规则中。您可能希望$request->custom在将其与随机字符串交换之前手动检查?

不确定这是否会有所帮助...您的问题尚不清楚您是要创建新用户还是更新现有用户。如果更新现有用户,请不要忘记从检查当前用户中排除:

'custom' => ['max:25', 'string',
    Rule::unique('users')->ignore($user->id)],

推荐阅读