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,id,game_id,<game_id input value here>'
);

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

  • game_id 存在于 games 表中( id 字段)
  • team1_id exists within the teams table ( id field) and the game_id column (in the teams table)必须等于 game_id 输入的值。
  • 如上 team2_id

所以,如果在我的表格中,我输入 1game_id ,我希望能够确保 team1_idteam2_id 具有值 1game_id

我希望这是有道理的。

谢谢

原文由 Jonathon 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 589
2 个回答

你想要一个 自定义验证规则,我会为此创建一个单独的类。但为简洁起见,这里使用内联闭包几乎相同:

 // 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,id',

    // last parameter here refers to the 'game_id' value passed to the validator
    'team1_id' => 'required|game_fixture:teams,id,game_id,game_id',
    'team2_id' => 'required|game_fixture:teams,id,game_id,game_id'
);

原文由 Jarek Tkaczyk 发布,翻译遵循 CC BY-SA 3.0 许可协议

检查 NULL 条件

'game_id' => 'required|exists:games,id,another_column,NULL',

您可以使用 (,) 列名称和值添加更多条件。

原文由 Raja 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题