首页 > 解决方案 > 验证 Laravel 中的唯一名称和名字

问题描述

我知道该主题存在,但到目前为止我还没有找到解决方案。我有一个players用两个字段命名的表:name, firstname.我的目标是在输入多个条目时都不重复。

我想得到这个结果。

Fostier | Alain 
Fostier | Jeremy 

如果我有两次福斯蒂尔| 阿兰这是不正确的。

重复系统应该只结合ID?我尝试了以下但没有成功。

public function store(Request $request)
{
    $request->validate([
        'name' => 'required|unique:players,name',
        'firstname' => 'required|unique:players,firstname',

    ]);
    Player::create($request->all());

    flashy('Valider');

    return redirect()->route('players.index')
        ->with('success', 'save');
}

标签: laravel

解决方案


您可以使用Illuminate\Validation\Rule该类进行复合检查,例如:

use Illuminate\Validation\Rule;
...

$request->validate([
    'name' => ['required', Rule::unique('players', 'name')->where(function ($query) use ($request) {
        return $query->where('name','!=', $request->input('firstname'));
    })],
    'firstname' => ['required', Rule::unique('players', 'firstname')->where(function ($query) use ($request) {
        return $query->where('firstname', '!=', $request->input('name'));
    })],
]);

这通过检查“名字”是否正在使用来检查“名字”的唯一性,并且对于“名字”也用它来检查“名字”。


推荐阅读