2017-08-07 48 views
1

我的功能來更新這樣的:如何爲更新添加laravel驗證只有一次?

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列,評級列已更新,它不能再次更新。所以每個ID,其評級列只能更新一次

例如,我有id = 8。如果在ID = 8,評級列已更新。然後,id = 8的評級列不能再次更新。所以它只能更新一次

我該怎麼辦?

更新

這是我的檢查,有一個零評級,MongoDB的ID的方式:

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

的過程是一樣的laravel

+0

該表中是否有其他列可以更新?如果是這樣,更新前評級列的價值是多少? –

+0

我認爲你只需要添加一個列標誌評級。讓我們說稱爲rating_updated的列,並且此列具有類似布爾值(true/false)的內容。這是真的,那麼評級欄已經更新了。你可以很容易地檢查它。 – wlisrausr

+0

@羅斯威爾遜,是的,它是updated_date列。更新前評級列的值爲空 –

回答

1

正如你在評論中紛紛表示,評價值爲null事先你可以使用exists驗證規則:

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

請注意,您必須在您UpdateRatingRequestRule門面use聲明等級:

use Illuminate\Validation\Rule; 

希望這有助於!

+0

它不起作用。有消息:'選擇的ID無效.' –

+0

我使用mongodb和mysql。評論表使用mongodb –

+0

@SuccessMan我從來沒有使用過mongodb,所以在我的結尾有一些未知數。你能編輯你的問題,以顯示你將如何檢查評級值是否爲mongodb中的空值? –

0

的方法之一是增加額外的列有類似「isEditable」的默認值1

然後在規則中 -

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

當您更新,isEditable的值更改爲0,然後驗證將不允許再次更新。

+0

是否不能通過色譜柱等級?更新列評級之前爲空。所以我不需要添加額外的列 –