我正在将一组联系人传递给一个要删除的控制器。在验证请求时,我需要确保请求删除的联系人未设置为首选联系人。(is_preferred = 1
)
我正在发送的数据:
[
contacts => [
[contact => '9874563214'],
['contact' => '8745632145'],
]
]
这就是我在扩展的FormRequest
类中验证数据的方法。
public function rules() {
return [
'contacts.*.contact' => 'bail|regex:/^[7-9][0-9]{9}$/',
];
}
这是我写的代码,是正确的方式吗?如何将正在评估的当前联络活动传递给(where("contact_no", xxx)
)
public function rules() {
return [
'contacts.*.contact' => 'bail|regex:/^[7-9][0-9]{9}$/|exists:user_contact,contact_no|
Rule::unique("user_contact")->where(function ($query) { $query->where('user_id', Auth::user()->id)->where("contact_no", XXX )->where("is_preferred", 1);}',
];
}
发布于 2019-01-21 19:41:34
是!您可以在请求文件中使用自定义查询。例如:
public function rules() {
$roles['contacts.*.contact'] = [
'bail',
'regex:/^[7-9][0-9]{9}$/',
'exists:user_contact,contact_no',
Rule::unique("user_contact")
->where(function ($query) {
$query->where('user_id', Auth::user()->id)
->where("contact_no", XXX )->where("is_preferred", 1);
})
];
return $roles;
}
如果您希望在查询中使用任何字段值,可以通过use
关键字将字段值传递给闭包函数。在这里,我们将发布YOM
实例,这意味着您可以将其用作Request
,以便您可以访问所有请求参数。
例如:
public function rules() {
$roles['contacts.*.contact'] = [
'bail',
'regex:/^[7-9][0-9]{9}$/',
'exists:user_contact,contact_no',
Rule::unique("user_contact")
->where(function ($query) use ($this) {
$contacts = array_values($this->contacts);
$query->where('user_id', Auth::user()->id)
->whereIn("contact_no", $contacts )->where("is_preferred", 1);
})
];
return $roles;
}
建议您不要在验证请求文件中直接使用query,因为它看起来不太好。
您可以使用Custom Validation代替内联查询。这将是非常清楚的。
https://stackoverflow.com/questions/54288643
复制相似问题