在Laravel中使用Unique

在Laravel中使用Unique,laravel,Laravel,我正在与Laravel建立一个图书门户。我对图书名称有一个唯一的验证规则 $request->validate([ 'name' => 'required|unique:books', 'about' => 'required', 'dsecription' => 'required', 'image' => 'required|mimes:jpeg,bmp,jpg,png|between:1,

我正在与Laravel建立一个图书门户。我对图书名称有一个唯一的验证规则

    $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已经将它转换成了一个数字。