Laravel 中指定存在验证规则时是否可以引用另一个字段?
我的要求:
public function rules()
{
return [
'numero_de_somme' => 'unique:personnels,numero_de_somme|exists:fonctionnaire,num_somme',
'cin' => 'unique:personnels,cin|exists:fonctionnaire,cin',
];
}
在我的验证规则中,我希望能够确保:
num_somme
存在于 fonctionnaire
表中cin
存在于函数表中,并且 cin
输入必须是
在 num_somme
num_somme:12345 辛:s89745
num_somme:78945 辛:U10125
解释:例如
num_somme
= 12345 且 cin
= U10125,则验证必须失败num_somme
= 12345 且 cin
= s89745,则验证必须成功我希望这是有道理的。
谢谢你
您可以简单地使用这个:
'request_input' => exists:table,col,alternative_col_1,alternative_val_1,alternative_col_2,alternative_val_2, ...'
SQL查询如下:
select count(*) as aggregate from `table` where `id` = [request_input] and `alternative_col1` = "alternative_val1" and `alternative_col2` = "alternative_val2"
我今天遇到了同样的需求,我想我有一个使用验证规则类的解决方案:规则示例。
这是我的场景:我有一个电子邮件验证表,我想确保通过的机器代码和激活代码存在于同一行。
请务必包含
use Illuminate\Validation\Rule;
$activationCode = $request->activation_code;
$rules = [
'mc' => [
'required',
Rule::exists('email_verifications', 'machineCode')
->where(function ($query) use ($activationCode) {
$query->where('activationCode', $activationCode);
}),
],
'activation_code' => 'required|integer|min:5',
'operating_system' => 'required|alpha_num|max:45'
];
exists 方法中的第一个参数是表,第二个参数是我用于“mc”字段的自定义列名称。我通过了我想使用“use”关键字检查的第二列,然后在 where 子句中使用该字段。
您可以使用Rule实现验证多列。
包括:
use Illuminate\Validation\Rule;
use Validator;
$AdminId = $request->AdminId;
$Validate = Validator::make($request->all(),[
'TaxId' => [ 'required', Rule::exists('tax','id')
->where(function ($query) use ($AdminId) {
$query->where('u_id', $AdminId);
})],
]);
if($Validate->fails())
{`Your ERROR HERE`}
else
{`SUCCESS`}
在我的示例中,我检查 u_id 和 Id,它们位于同一行和 2 列中。
解释:例如
我的数据库在税表中有 2 行
id = 1,u_id = 1,税费 =“GST”,值 -> 8
id = 2,u_id = 2,税费 =“GST”,值 -> 5
第一种情况,如果输入 id = 2 且 u_id = 1,则验证必须失败,因为该行属于 u_id = 2。
第二种情况,如果输入 id = 2 且 u_id = 2 验证必须成功
我用最简单的方法解决了这个问题
numero_de_somme
'numero_de_somme' => 'unique:personnels,numero_de_somme|exists:fonctionnaire,num_somme,cin,'.Request::get('cin'),
cin
'cin' => 'unique:personnels,cin|exists:fonctionnaire,cin',
PS。别忘了打电话
use Illuminate\Http\Request;
这里有一种使用
Rule
类来实现的方法。从技术上讲,两次使用 exist
规则是多余的。
两个
exists
规则检查完全相同的事情,然后对数据库执行相同的查询。
use Illuminate\Validation\Rule;
public function rules()
{
$data = $this->validationData();
$cin = $this->has('cin')
? $data['cin']
: null;
$num_somme = $this->has('numero_de_somme')
? $data['numero_de_somme']
: null;
return [
'numero_de_somme' => [
Rule::unique('personnels', 'numero_de_somme'),
Rule::exists('fonctionnaire', 'num_somme')->where('cin', $cin),
],
'cin' => [
Rule::unique('personnels', 'cin'),
Rule::exists('fonctionnaire', 'cin')->where('num_somme', $num_somme),
],
];
}
if (is_numeric($request->get('emailOrphone'))){
$request->validate([
'emailOrphone'=>'exists:users,phone',
],
[
'emailOrphone.exists'=>'phone is invalid.'
]);
}else{
$request->validate([
'emailOrphone'=>'exists:users,email',
],
[
'emailOrphone.exists'=>'email is invalid.''
]);
}