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

如何在 laravel 验证中验证阵列数据的唯一复合键

如何在 laravel 验证中验证阵列数据的唯一复合键

PHP
MMTTMM 2022-08-19 09:49:57
请求数据    {        "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_scores成功验证数据。    {        "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贡献1798条经验 获得超3个赞

在搜索了许多博客,教程,当然还有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-08-19
  • 1 回答
  • 0 关注
  • 85 浏览

添加回答

举报

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