为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 laravel Validations 中验证数组数据的唯一复合键

如何在 laravel Validations 中验证数组数据的唯一复合键

PHP
慕斯709654 2022-07-29 15:29:30
请求数据    {        "exam_id": 10,        "exam_scores": [        {          "student_id": 1,          "subject_id": 1,          "marks": 50,        },        {          "student_id": 1,          "subject_id": 2,          "marks": 70,        },        {          "student_id": 1,          "subject_id": 3,          "marks": 80,        }        ],    }其中 student_id 和 subject_id 是唯一的复合键,如何使用接受数据数组的规则方法为复合键制作验证器()我试过但它没有按预期工作。$validator = Validator::make(request()->all(), [    "exam_id"=> "required|integer",    "exam_scores"=> "required|array",    'exam_scores.*.student_id' => [        Rule::unique('results')->where(function ($query) {            return $query                ->whereStudent_idAndSubject_id(request()->get('exam_scores.*.student_id'),request()->get('exam_scores.*.subject_id'))        })    ],]);以下请求不应验证数据。但它验证成功。{        "exam_id": 10,        "exam_scores": [        {          "student_id": 1,          "subject_id": 1,          "marks": 50,        },        {          "student_id": 1,          "subject_id": 1,          "marks": 70,        }       ],    }下面的请求成功地验证了具有预期的单个考试分数对象的数据。    {        "exam_id": 10,        "exam_scores": {            "student_id": 1,            "subject_id": 1,            "marks": 50,        }    }$validator = Validator::make(request()->all(), [    "exam_id"=> "required|integer",    "exam_scores"=> "required|array",    'exam_scores.student_id' => [    Rule::unique('results')->where(function ($query) {        return $query            ->whereStudent_idAndSubject_id(request()->get('exam_scores.student_id'),request()->get('exam_scores.subject_id'))    })],]);
查看完整描述

1 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

在搜索了很多博客、教程和当然 laravel 文档之后,我得到了解决我的问题的东西,这里是博客链接。这不是我真正想要的,但它明确了我必须做什么的概念。这个人拯救了我的一天。

验证动态请求值

这是一个例子。

namespace App\Http\Requests;    

use App\Http\Requests\Request;


class OrderRequest extends Request

{


    /**

     * Determine if the user is authorized to make this request.

     *

     * @return bool

     */

    public function authorize()

    {

        return true;

    }


    /**

     * Get the validation rules that apply to the request.

     *

     * @return array

     */

    public function rules()

    {

        $rules = [

            'name' => 'required|max:255',

        ];


        foreach ($this->request->get('items') as $key => $val) {

            $rules['items.' . $key] = 'required|max:10';

        }


        return $rules;

    }


    public function messages()

    {

        $messages = [];

        foreach ($this->request->get('items') as $key => $val) {

            $messages['items.' . $key . '.max'] = 'The field labeled "Book Title ' . $key . '" must be less than :max characters.';

        }

        return $messages;

    }


}

解决方案非常简单易行。


查看完整回答
反对 回复 2022-07-29
  • 1 回答
  • 0 关注
  • 163 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信