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

请求数据


    {

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

    })

],

]);


慕斯709654
浏览 164回答 1
1回答

跃然一笑

在搜索了很多博客、教程和当然 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;    }}解决方案非常简单易行。
打开App,查看更多内容
随时随地看视频慕课网APP