我在验证 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 验证来实现。
注意:我的表是独一无二的,但我也想验证它
答案 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
);