多个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" />

数据库结构

iduserId名称

我得到了

未找到列:1054"where clause"中的未知列"file">

我希望每个用户只有一个文件名,并且我希望使用laravel 8验证。

注意:我使我的表是唯一的,但我也想验证它

您可以使用自定义验证

$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
);

相关内容

  • 没有找到相关文章

最新更新