laravel中添加数据的使用使用valdiate验证数据是否在关系表中存在

在添加数据的时候,是否可以通过valdiate验证数据是否存在于关系表中?

阅读 4.1k
3 个回答
  1. 可以自定义验证, 貌似有点复杂.....鄙人水平有限, 可自行看官方文档

  2. 还可以自以为简单粗暴的方法, 在 Controller 中写你连表查询验证逻辑如果异常手动重定向并且抛出错误, 如下段代码

    public function store(Request $request)
    {
        $this->validate($request, [
            'password' => 'required|min:6|max:100',
            'newPassword' => 'required|min:6|max:100',
            'newPasswordConfirm' => 'required|same:newPassword|min:6|max:100',
        ], [], [
            'password' => '旧密码',
            'newPassword' => '新密码',
            'newPasswordConfirm' => '确认新密码',
        ]);

        #这个地方就是个自定异常的演示, 并不是你要的连表查询, 这里只提供一个思路
        if (!\Hash::check($request->get('password'), \Auth::user()->password)) {
            return redirect()->back()->withErrors(['password' => '旧密码错误']);
        }

    }

可以,使用exists规则,例如

'exists:表名,字段名'

根据你的情况,使用自带规则无法满足,需要自己创建新的规则,这里以创建一个验证中文的规则为例

$validator = app('validator');
$validator->extend('chinese', function($attribute, $value, $parameters, $validator) {
    return Validator::chinese($value);
});
$validator->replacer("chinese", function($message, $attribute, $rule, $parameters) {
    if ($message == 'validation.chinese') {
        return "属性 {$attribute} 必须是合法的中文";
    }

    return $message;
});

具体参考文档 Custom Validation Rules 部分。

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