laravel如何基于自定义数据库查询添加验证规则

时间:2018-11-03 19:12:13

标签: laravel laravel-5 laravel-5.6

我希望用户输入邮政编码,然后在注册控制器中,我想针对我拥有的邮政编码数据库来验证该邮政编码,因此,如果用户提供的邮政编码在我的数据库中,尽管他/她使用了格式化,它还是会成功我的意思是,无论他/她使用空格还是不使用空格,我都希望验证成功。 我想使用的查询:

$postalcode=$data['postal_code'];
    zipcodes::whereRaw('replace(POSTAL_CODE,\' \',\'\')=? ',[str_replace(' ','',$postal_code) 

我尝试在验证中使用以下内容:

Rule::exists('zipcodes','POSTAL_CODE')->where(function ($query) use($postalcode) {
              //  die($postalcode);
                $query->whereRaw('replace(POSTAL_CODE,\' \',\'\')=? ',[str_replace(' ','',$postalcode)]);
            })

但是它不能满足我的要求,并且似乎已经尝试在执行mysql replace或php str_replace之前查找邮政编码表中是否存在邮政编码。 所以有什么建议吗?

1 个答案:

答案 0 :(得分:0)

最简单的方法是使用Laravel的validate()方法。 https://laravel.com/docs/5.7/validation

您可以使用Exists验证规则。它将检查您告诉它的数据库,如果记录存在,如果存在,它将显示为有效。

如果需要在验证之前修剪空格,请先执行$request->postal_code = str_replace(' ', '', $request->postal_code);,然后再调用validate方法。

这是一个完整的示例:

$request->postal_code = str_replace(' ', '', $request->postal_code);

$request->validate([
    'postal_code' => 'required|exists:zipcodes',
]);