php – Laravel验证:存在附加列条件 – 自定义验证规则

前端之家收集整理的这篇文章主要介绍了php – Laravel验证:存在附加列条件 – 自定义验证规则前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在Laravel中指定存在的验证规则时,是否有一种引用另一个字段的方法?我希望能够说输入a必须存在于表a中,输入b必须存在于表b中,并且表b中列x的值必须等于输入a.

最好用例子解释:

public $rules = array(
    'game_id' => 'required|exists:games,id','team1_id' => 'required|exists:teams,id,game_id,<game_id input value here>','team2_id' => 'required|exists:teams,<game_id input value here>'
);

因此,根据我的验证规则,我希望能够确保:

> game_id存在于游戏表中(id字段)
> team1_id存在于teams表(id字段)中,game_id列(在teams表中)必须等于game_id输入的值.
>如上所述team2_id

因此,如果在我的表单中,我为game_id输入1,我希望能够确保team1_id和team2_id的teams表中的记录对于game_id具有值1.

我希望这是有道理的.

谢谢

你想要一个 custom validation rule,我会为此创建一个单独的类.但为简洁起见,使用内联闭包几乎相同:
// give it meaningful name,I'll go with game_fixture as an example
Validator::extend('game_fixture',function ($attribute,$value,$parameters,$validator) 
{
    if (count($parameters) < 4)
    {
        throw new \InvalidArgumentException("Validation rule game_fixture requires 4 parameters.");
    }

    $input    = $validator->getData();
    $verifier = $validator->getPresenceVerifier();

    $collection = $parameters[0];
    $column     = $parameters[1];
    $extra      = [$parameters[2] => array_get($input,$parameters[3])];

    $count = $verifier->getMultiCount($collection,$column,(array) $value,$extra);

    return $count >= 1;
});

然后使用这个:

$rules = array(
    'game_id' => 'required|exists:games,// last parameter here refers to the 'game_id' value passed to the validator
    'team1_id' => 'required|game_fixture:teams,game_id','team2_id' => 'required|game_fixture:teams,game_id'
);

猜你在找的Laravel相关文章