Как проверить уникальный составной ключ данных массива в laravel Проверки - PullRequest
2 голосов
/ 23 января 2020

Запрос данных

    {
        "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 Ответ

0 голосов
/ 27 января 2020

После поиска большого количества блогов, учебных пособий и, конечно, laravel документации, я получил кое-что, что решило мою проблему, вот ссылка на блог. это было не то, что я хотел, но это очищает представление о том, что я должен делать. этот парень спасает мой день.

Подтверждение Dynami c Значения запроса

Вот пример.

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;
    }

}

Решение были довольно просты и легки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...