我有一个关于验证的小问题。
有一个api路由POST /api/document/{document}/link
,它接受一个文档ID数组({"ids": [1, 2, 3]}
),该ID链接到绑定到该路由的Document。我按如下方式验证此数组
public function rules()
{
return [
'ids' => 'required|array',
'ids.*' => 'numeric|exists:documents,id'
];
}
问题在于文档模型具有partner
属性,并且不可能将来自不同合作伙伴的文档链接在一起。我要检查的是(通过其ID)传递的文档是否与绑定文档属于同一伙伴。我想在FormRequest中对此进行验证。有可能吗?
答案 0 :(得分:0)
您可以将这些用于您的规则:
'ids' => [
'required',
'array'
],
'ids.*' => [
'required',
'exists:documents,id'
],
'ids.*.partner_id' => [
Rule::in([$document->partner_id])
]
这将验证您的ID是否与数组中的数字匹配,因为我们仅将ID $document
中给出的路由中的ID放在其中,否则该ID应该匹配或返回失败。
答案 1 :(得分:0)
所以,这就是我的结论:
public function rules()
{
/** @var Document $document */
$document = $this->route('document');
return [
'ids' => ['required', 'array'],
'ids.*' => ['required', 'numeric', Rule::exists('documents','id')->where('partner_id', $document->partner_id)],
];
}
事实证明,此案在https://laravel.com/docs/5.8/validation#rule-exists的Laravel文档中进行了描述。我只需要自定义执行的查询,以确保传递的id
和partner_id
都存在。