laravel - 两个组合列的Laravel验证
问题描述
我是 Laravel 的新手,我需要一些验证帮助。我有两个字段,一个是国家代码,另一个是电话号码,它们分别存储在数据库的相应列中。我想验证电话号码是否唯一我想要的是获取电话号码 (1234567) country_Code(+12) 像 (+121234567) 一样加入它们,然后针对 db 列 country_Code(+12) + phone(1234567) 验证(唯一) )。我怎样才能做到这一点?
这是我的自定义表单请求的验证规则方法
public function rules()
{
return [
'first_name' => 'required|string',
'last_name' => 'required|string',
'email' => ['required', Rule::unique('clients')->ignore($this->client)],
'country_code' => 'required',
'phone' => ['required',Rule::unique('clients')->ignore($this->client)],
'receive_video_lessons' => 'required|boolean'
];
}
解决方案
您可以使用自定义规则。尝试这样的事情:
public function rules()
{
return [
'first_name' => ['required', 'string'],
'last_name' => ['required', 'string'],
'email' => ['required', Rule::unique('clients')->ignore($this->client)],
'country_code' => ['required'],
'phone' => ['required', new IsValidPhoneNumber($this->country_code, $this->client)],
'receive_video_lessons' => 'required|boolean'
];
}
然后在您的自定义验证规则中:
class IsValidPhoneNumber implements Rule
{
protected $countryCode;
protected $clientId;
public function __construct($countryCode, $clientId)
{
$this->countryCode = $countryCode;
$this->clientId = $clientId;
}
public function passes($attribute, $value)
{
return ! Client::where('country_code', $this->countryCode)
->where('phone', $value)
->where('client_id', '!=', $this->clientId)
->exists();
}
public function message()
{
return 'This :attribute is not valid.';
}
}
你可能需要按摩它才能工作,但你明白了。
推荐阅读
- acumatica - 登录后活动
- python - 如何实现终点线?
- mongodb - 如何更改 MongoDB 中对象中的数据?
- ruby-on-rails - 'books=(books)' 方法在做什么?
- debugging - unrecognizedPacketType,Actor server1.conn1.tabDescriptor1 无法识别数据包类型“附加”
- elasticsearch - 每天存储桶的文档数并应用了一些过滤器
- graphql - Graphql,仅当记录不为空时才返回结果
- android - AndroidError:程序类型已经存在:android_serialport_api.SerialPort 当我尝试从 Android Studio 生成签名 APK
- angular - 值不会在角度 6 处绑定到选择器
- amazon-web-services - Access-Control-Allow-Headers 在预检响应中不允许访问控制允许来源