Laravel验证:存在两列相同的行

时间:2017-06-08 13:57:00

标签: php laravel validation rules

在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存在于fonctionnaire表中,cin输入必须是 在num_somme
  • 的同一行

num_somme:12345 cin:s89745

num_somme:78945 cin:U10125

解释:例如

  • 第一种情况,如果输入num_somme = 12345且cin = U10125,则验证必须失败
  • 第二种情况,如果输入num_somme = 12345且cin = s89745,验证必须成功

我希望这是有道理的。

谢谢

4 个答案:

答案 0 :(得分:3)

我今天遇到了同样的需求,我认为我有一个使用验证规则类的解决方案:Rule example

以下是我的方案:我有一个电子邮件验证表,我想确保在同一行上存在传递的机器代码和激活码。

请务必加入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'的自定义列名称。领域。我使用'使用'来传递我要检查的第二列。关键字然后在where子句中使用该字段。

答案 1 :(得分:1)

我设法用最简单的方法解决它

  • for numero_de_somme

'numero_de_somme' => 'unique:personnels,numero_de_somme|exists:fonctionnaire,num_somme,cin,'.Request::get('cin'),

  • for cin

'cin' => 'unique:personnels,cin|exists:fonctionnaire,cin',

PS 。别忘了打电话给use Illuminate\Http\Request;

答案 2 :(得分:1)

您可以使用规则来验证多列。

包含:

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行税收表

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 ,则验证必须成功

答案 3 :(得分:0)

您可以简单地使用它:

'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"