如何仅对更新添加 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;
希望对您有所帮助!
我的功能是这样更新的:
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;
希望对您有所帮助!