如何只为更新添加一次laravel验证?

时间:2017-08-07 12:45:21

标签: laravel validation laravel-5.3 rules

我的更新功能如下:

<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/nvd3/1.8.1/nv.d3.js"></script>
<button onClick="updateTheChart()">Update</button>
<div id="chart3"></div>

我的验证规则如下:

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

我想添加验证服务器端laravel。如果特定的id列,已更新评级列,则无法再次更新。因此,每个id,其评级列只能更新一次

例如,我有id = 8.如果在id = 8,则评级列已更新。然后,id = 8的评级列无法再次更新。所以它只能更新一次

我该怎么做?

更新

这是我用mongodb检查id为null的id的方法:

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

该过程与laravel相同

2 个答案:

答案 0 :(得分:1)

正如您在评论中所述,评级值预先为null,您可以使用exists验证规则:

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

请注意,您必须在use课程中添加Rule外观的UpdateRatingRequest声明:

use Illuminate\Validation\Rule;

希望这有帮助!

答案 1 :(得分:0)

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

然后在规则中 -

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

更新时,将isEditable的值更改为0,然后验证程序将不允许再次更新。