在Laravel中使用Unique
我正在与Laravel建立一个图书门户。我对图书名称有一个唯一的验证规则在Laravel中使用Unique,laravel,Laravel,我正在与Laravel建立一个图书门户。我对图书名称有一个唯一的验证规则 $request->validate([ 'name' => 'required|unique:books', 'about' => 'required', 'dsecription' => 'required', 'image' => 'required|mimes:jpeg,bmp,jpg,png|between:1,
$request->validate([
'name' => 'required|unique:books',
'about' => 'required',
'dsecription' => 'required',
'image' => 'required|mimes:jpeg,bmp,jpg,png|between:1, 6000',
'author_id' => 'required',
'publisher' => 'required',
'recommended' => 'required',
'epub_url' => 'required',
'year'=> 'required',
'pages' => 'required',
]);
我发现一个作者可以有相同的书名。在名称上使用“唯一”,将不允许我上载
我在想,如果有办法的话,我可以查一下作者和书名
检查作者是否同名,然后对name else upload应用唯一规则
我没有找到任何解决办法。这就是为什么我自己做了这样的自定义验证:
$request->validate([
'name' => 'required|unique:books',
'author_id' => 'required',
// ...
]);
$data = Book::where('author_id', $request->author_id)->where('name', $request->name)->first();
if(!empty($data)) {
return redirect()->back()->withErrors('This name already taken'); // error message
}
我没有找到任何解决办法。这就是为什么我自己做了这样的自定义验证:
$request->validate([
'name' => 'required|unique:books',
'author_id' => 'required',
// ...
]);
$data = Book::where('author_id', $request->author_id)->where('name', $request->name)->first();
if(!empty($data)) {
return redirect()->back()->withErrors('This name already taken'); // error message
}
您可以尝试使用可以传递到unique规则的额外where条件在某些条件下应用unique约束:
// we will make sure 'author_id' is an existing value
'author_id' => 'bail|required|integer|exists:authors,id',
'name' => [
'bail',
'required',
Rule::unique('books')
->where('author_id', (int) $request->input('author_id')),
],
假设作者id
在图书
表中
您可以尝试使用额外的where条件,这些条件可以传递给unique规则,以便在某些条件下应用unique约束:
// we will make sure 'author_id' is an existing value
'author_id' => 'bail|required|integer|exists:authors,id',
'name' => [
'bail',
'required',
Rule::unique('books')
->where('author_id', (int) $request->input('author_id')),
],
假设作者id
在图书
表中
这比我的答案更正确,也不太笼统。我测试了你的答案&它工作得很好。没有必要使用
(int)
,PHP已经将它转换为一个数字。这比我的答案更正确,也不太分散。我测试了你的答案&它工作得很好。没有必要使用(int)
,PHP已经将它转换成了一个数字。