Laravel5.8.*如何实现多个字段唯一性验证?

表中有3个字段:link_en、link_zh、link_github。都是用来保存 url 的。添加数据的时候如何验证数据库唯一。比如 link_en 里已存在“https://baidu.com/”, 那么,如果再往 link_zh 字段添加同样的值,则不通过。

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 9

手动查询判断吧

4年前 评论

自己写个自定义验证规则吧,自己写查询验证

4年前 评论

@UpGod @清风知我意 可不可以理解为,官方并没有提供直接符合我需求的验证规则是吧~需要自己自定义。

4年前 评论
清风知我意 4年前
    $action = Route::current()->getActionMethod();
    // 判读唯一性
    $where = [
        'link_en'      => $request->input('link_en'),
        'link_en2'    => $request->input('link_en2'),
        'link_en3'    => $request->input('link_en3')
    ];
    $filters = [
        'store'  => [
            'id'              => 'numeric',
            'link_en'      => [
                'required',
                'numeric',
                Rule::unique('mysql.XXXX')
                    ->where(function ($query) use ($where) {
                        return $query->where($where);
                    })->ignore(request()->id, 'id')
            ]
        ]
    ];
    return $filters[$action] ?? [];

可以参考下

4年前 评论

可以试试

'link_en' => 'unique:users,link_en|unique:users,link_zh|...',
'link_zh' => 'unique:users,link_en|unique:users,link_zh|...'

效率肯定不高的

4年前 评论

添加一张 link 表,保存link_id主表idlink_urllink_type
link_url 设为 unique,然后建立主表和 link 表的一对多关联
其实有点不太明白你的数据表的设计意图
可否说明一下?

4年前 评论

@laravel_denghy 就是收藏一个工具,工具的官网可能有3种:中文官网、英文官网、Github。

4年前 评论
'link_en' => Rule::exists('table_name')->where(function ($query) use ($request) {
        return $query->where('link_en', $request->input('link_en'))
                    ->orWhere('link_zh', $request->input('link_zh'))
                    ->orWhere('link_github', $request->input('link_github'));
})
4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!