首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel -数据库中存在要检查的验证规则字段,并且属于同一行的列被设置为指定值

Laravel -数据库中存在要检查的验证规则字段,并且属于同一行的列被设置为指定值
EN

Stack Overflow用户
提问于 2019-01-21 19:06:54
回答 1查看 223关注 0票数 0

我正在将一组联系人传递给一个要删除的控制器。在验证请求时,我需要确保请求删除的联系人未设置为首选联系人。(is_preferred = 1)

我正在发送的数据:

代码语言:javascript
运行
复制
[
   contacts => [
      [contact => '9874563214'],
      ['contact' => '8745632145'],
   ]
]

这就是我在扩展的FormRequest类中验证数据的方法。

代码语言:javascript
运行
复制
public function rules() {
    return [
        'contacts.*.contact' => 'bail|regex:/^[7-9][0-9]{9}$/',
    ];
}

这是我写的代码,是正确的方式吗?如何将正在评估的当前联络活动传递给(where("contact_no", xxx))

代码语言:javascript
运行
复制
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);}',
    ];
}
EN

回答 1

Stack Overflow用户

发布于 2019-01-21 19:41:34

是!您可以在请求文件中使用自定义查询。例如:

代码语言:javascript
运行
复制
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,以便您可以访问所有请求参数。

例如:

代码语言:javascript
运行
复制
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代替内联查询。这将是非常清楚的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54288643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档