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 @"