如何仅对更新添加 laravel 验证一次?

How to add laravel validation for updates only once?

我的功能是这样更新的:

public function updateRating(UpdateRatingRequest $request) {
    $param = $request->only('id', 'rating');
    $id = $param['id'];
    $rating = $param['rating'];
    $review = Review::find($id);
    $review->rating = $rating;
    $review->save();
}

我的验证规则是这样的:

<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UpdateRatingRequest extends FormRequest {
    public function rules() {
        return [
            'id'=>'required',
            'rating'=>'required'
        ];
    }
}

我想添加验证服务器端 laravel。如果某个id列,rating列已经更新,就不能再更新了。所以每个id,它的rating列只能更新一次

例如我有 id = 8。如果在 id = 8 上,评级列已更新。然后 id = 8 处的评级列不能再次更新。所以只能更新一次

我该怎么做?

更新

这是我用 mongodb 检查具有空评级的 id 的方法:

$reviews = Review::where('_id',$param['id'])->whereNull('rating')->first();

过程同laravel

一种方法是添加额外的列,例如 "isEditable",默认值为 1

然后在规则中 -

public function rules() {
    return [
        'id'=>'required',
        'rating'=> ['required', 'exists:isEditable,1']
    ];
}

更新时,将isEditable的值改为0,验证器将不允许再次更新。

正如您在评论中所说,事先评分值为空,您可以使用 exists 验证规则:

public function rules()
{
    return [
        'id'     => [
            'required',
            Rule::exists('reviews')->where(function ($query){
                $query->whereNull('rating');
            })
        ],
        'rating' => 'required',
    ];
}

请注意,您必须在 UpdateRatingRequest class:

中包含 Rule 门面的 use 语句
use Illuminate\Validation\Rule;

希望对您有所帮助!