Laravel Validator:将唯一字段检查限制为特定产品



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

// 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');

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

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

无法使验证规则正常工作,所以我找到了这个解决方案:

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

最新更新