Laravel:通过请求验证更新数据不更新数据

时间:2019-11-07 10:50:33

标签: php mysql laravel eloquent

我正在更新API端点中的数据。那样,我正在使用表单请求验证将验证与Controller分开。

这与“存储请求”一起正常工作。

但是,当我尝试如下所述更新单个数据时,响应将返回以下响应数据。

作为,数据已经存储在数据库中。当我发送更新数据请求时,应返回更新的数据。但是,它没有回来。

需要帮助解决该问题。

体内的JSON数据:

{
    "title": "Question Changed 2"
}

当前响应:

{
  "question_type": [
    "Question Type is Required!"
  ],
  "question": [
    "Question is Required!"
  ],
  "is_required": [
    "Is Require Value is Required"
  ]
}

QuestionRequest:

public function rules()
    {
        return [
            'question_type' => 'required | min:3 | max:10',
            'title' => 'required | min:5 | max:100',
            'question' => 'required | min:5 | max:255',
            'description' => 'min:10 | max:255',
            'is_required' => 'required',
        ];
    }

更新:

public function update(QuestionRequest $request, Question $question)
    {
        $question = $question->update($request->all());

        return response()->json($question, 200);
    }

2 个答案:

答案 0 :(得分:1)

您需要使用Docs

中提到的有时需要验证的规则
  

在某些情况下,仅当输入数组中存在该字段时,您才可能希望对该字段运行验证检查。要快速完成此操作,请将有时会使用的规则添加到您的规则列表中

您可以将rules数组更改为

        return [
            'question_type' => 'sometimes|required | min:3 | max:10',
            'title' => 'sometimes|required | min:5 | max:100',
            'question' => 'sometimes|required | min:5 | max:255',
            'description' => 'sometimes|min:10 | max:255',
            'is_required' => 'sometimes|required',
        ];

这样,只有在请求中存在这些字段时,才会运行对这些字段的验证。

答案 1 :(得分:0)

如果有人需要解决方案,我正在更新答案:

我仅将条件逻辑放在“请求验证规则”中,如下所示。根据@ ascsoftw添加了 有时 以更新数据。

public function rules()
    {
        switch($this->method())
        {
            case 'POST':
                {
                    return [
                        'question_type' => 'required | min:3 | max:10',
                        'title' => 'required | min:5 | max:100',
                        'question' => 'required | min:5 | max:255',
                        'description' => 'min:10 | max:255',
                        'is_required' => 'required',
                    ];
                }
                break;

            case 'PUT':
                {
                    return [
                        'question_type' => 'sometimes | required | min:3 | max:10',
                        'title' => 'sometimes | required | min:5 | max:100',
                        'question' => 'sometimes | required | min:5 | max:255',
                        'description' => 'sometimes | min:10 | max:255',
                        'is_required' => 'sometimes | required',
                    ];
                }
                break;

            default:
                break;
        }
    }