多 Laravel 8 列唯一性验证

时间:2021-07-06 13:40:48

标签: php laravel laravel-8

我在验证 laravel 8 中的多列时遇到问题。

这是我的代码:

控制器

$validator = $messages = [
                'file' => 'This user has current file name',
            ];
$fileName = $request->file->getClientOriginalName();
$userId = Auth::user()->id;
$validator = Validator::make(
        $request->all(),
        [
            'file' => [
                'required', 'max:8000',
                Rule::unique('files')->where(function ($query) use ($userId, $fileName) {
                    return $query->where('userId', $userId)
                        ->where('name', $fileName);
                }),
            ],
        ],
        $messages
    );

查看

<input type="file" className="form-control" name="file" id="file" />

数据库结构

标识 用户身份 姓名

我得到了

<块引用>

未找到列:1054 'where 子句'中的未知列'文件'

我希望每个用户只有一个文件名,并且我想通过 laravel 8 验证来实现。

注意:我的表是独一无二的,但我也想验证它

1 个答案:

答案 0 :(得分:1)

您可以使用自定义验证

$fileName = $request->file->getClientOriginalName();
$userId = Auth::user()->id;
$validator = Validator::make(
        $request->all(),
        [
            'file' => [
                'required', 'max:8000',
                function ($attribute, $value, $fail) use ($userId, $fileName){
                    $exists = \DB::table('files')->where('userId', $userId)->where('name', $fileName)->count();
                    if ($exists) {
                        $fail('This user has current file name');
                    }
                },
            ],
        ],
        $messages
    );

或通过使用另一个数组而不是 $request->all()

来使用唯一规则
$fileName = $request->file->getClientOriginalName();
$userId = Auth::user()->id;
$validator = Validator::make(
        ['name' => $filename, 'file' => $request->file], //notice the change HERE
        [
            'file' => ['required', 'max:8000']
            'name' => [
                'required',
                Rule::unique('files')->where(function ($query) use ($userId, $fileName) {
                    return $query->where('userId', $userId);
                })
            ],
        ],
        $messages
    );
相关问题