【问题标题】:Laravel: update data through Request Validation is not updating dataLaravel:通过请求验证更新数据不是更新数据
【发布时间】:2020-03-03 22:33:42
【问题描述】:

我正在更新 API 端点中的数据。因为,我使用表单请求验证将验证与控制器分开。

这适用于存储请求。

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

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

需要帮助来解决这个问题。

正文中的 JSON 数据:

{
    "title": "Question Changed 2"
}

目前的回应:

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

问题请求:

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

【问题讨论】:

  • 你期望从你的控制器方法返回什么?因为update 返回一个布尔值
  • @lagbox,我要返回数据,已经更新了

标签: php mysql laravel eloquent


【解决方案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',
        ];

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

【讨论】:

  • 在这种情况下..我需要放置一个默认值表单字段..数组中不存在。如果我不想设置默认值怎么办?
  • 如果只更新title,那么只需要在Request Body中发送title即可。 Laravel 只会验证 title 而不会验证其他字段。然后它将更新与问题模型相关的title
  • 在这种情况下,这是有效的。但是,我的问题是:当我尝试存储数据而不是将标题放入数组时:需要默认值:1364 字段“标题”没有默认值(显示错误)。如何处理?
  • 那么您应该在迁移中将该列设为nullable
  • 如果我在迁移中放入 nullable 并在请求验证中要求该字段,则显示相同的错误:1364 字段“标题”没有默认值
【解决方案2】:

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

我只是将条件逻辑放在请求验证规则中,如下所示。添加sometime根据@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;
        }
    }

【讨论】:

    【解决方案3】:
    `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',
        ];
    

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    • 2017-11-29
    相关资源
    最近更新 更多