关于php:Laravel验证程序:将唯一字段检查限制为特定产品

Laravel Validator: limiting unique field check to specific product

我正在尝试制作一个唯一的验证器来检查特定的产品。像:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// Validate Request for name and url
$this->validate($request, [
    'nome' => 'bail|required|min:2|unique:produto,name',
    'url'  => 'required|unique:produto',
]);

// Grab the user->id
$user_id = Auth::user()->id;

// Create a new product
if ($product = Product::create([
    'user_id'   => $user_id,
    'name'      => $request['nome'],
    'url'       => $request['url'],
    'is_active' => $request['is_active'],
])) {
    flash()->success('Produto criado.');
} else {
    flash()->error('N?£o foi possivel criar produto.');
}

// Check if $request data is unique at above created product
$this->validate($request, [
    'addmore.*.plataforma' => 'required|unique:plataforma_produto,plataforma_id,' . $product->id . ',id,product_id',
]);

// For each of the addmore.*. fields create an entry on DB
foreach ($request->addmore as $value) {
    Plataformaprod::create([
        'product_key'          => $value['product_key'],
        'basic_authentication' => $value['basic_authentication'],
        'codigo_produto'       => $value['codigo_produto'],
        'plataforma_id'        => $value['plataforma'],
        'product_id'           => $product->id,
    ]);
}

return redirect()->route('products.index');

检查我的代码中的注释基本上是这样做的:

  • 验证$request的名称和网址
  • 抓住user->id
  • 创建一个新产品
  • (这是我无法进行的工作)运行唯一规则,仅针对特定的PRODUCT_ID,并检查它是否具有唯一的PLATAFORMA_ID条目!


无法使验证规则正常运行,所以我找到了此解决方案:

  • 在我的迁移文件中的product_id和plataforma_id之间创建了唯一索引。
  • 创建了一个尝试捕获来封装空穴存储方法的尝试。
  • 捕获$ e并将其转换为500错误消息,内容为:"该产品已经具有带有该ID的plataforma_id。只需添加第一个
    记录,在"编辑"页面中更改其信息。如果此错误持续存在,请联系
    dev @"