2014-10-17 115 views
1

假設我有類別表,並且我已經使用了軟刪除。現在我第一次添加了一個類別「測試」後,我刪除了這個類別,所以它會更新我的deleted_at列從數據庫。Laravel Soft刪除唯一列名稱

現在,當我再次嘗試添加名爲「Test」的類別時,它正在說我已經拍攝了該名稱。我已經嘗試過發佈Here的規則。

但它不工作。我在模型中使用了特質。以下是我的模型代碼。

<?php 
namespace App\Models; 

use Illuminate\Support\Facades\Validator as Validator; 
use Illuminate\Database\Eloquent\SoftDeletingTrait; 

class Category extends \Eloquent { 

    use SoftDeletingTrait; 

    protected $dates = ['deleted_at']; 

    /** 
    * Guarded fields which are not mass fillable 
    * 
    * @var array 
    */ 
    protected $guarded = array('id'); 

    /** 
    * Name of the table used 
    * 
    * @var string 
    */ 
    protected $table = 'travel_categories'; 

    /** 
    * Validating input. 
    * 
    * @param array $input 
    * @return mixed (boolean | array) 
    */ 
    public static function validate($input, $id = null) { 
     $rules = array(
      'name' => array('required','min:2','max:100','regex:/[a-zA-z ]/','unique:travel_categories,name,NULL,id,deleted_at,NULL'), 
      'description' => 'Required|Min:2', 
      'image' => 'image' 
     ); 
     if ($id) { 
      $rules['name'] = 'Required|Between:3,64|Unique:travel_categories,name,'.$id; 
     } 

     $validation = Validator::make($input,$rules); 

     return ($validation->passes())?true : $validation->messages(); 
    } 
} 
+0

據我的瞭解laravel使用deleted_at列軟刪除,但數據庫(MySQL的)不知道,所有它知道這是datetime列,所以,當你犯了一個列獨特數據庫遵循規則,保持其獨特... ,我認爲這將幫助你http://stackoverflow.com/questions/17458681/laravel-4-how-use-use-a-unique-validation-rule-unique -columns-with-soft-delet?​​lq = 1 – NULL 2014-10-17 11:47:12

回答

3

第一:我不明白幾件事情。你是否想要驗證創建和更新?那麼爲什麼你允許名稱的長度爲2到100,而更新後只有3到64?

二:我建議這個下降:

protected $dates = ['deleted_at']; 

我看不到的,我們的目標。

第三,我在這裏談到了,你想做什麼?我想,你想用這個過濾器'unique:travel_categories,name,NULL,id,deleted_at,NULL'要做的是檢查活動類別中name的唯一性。在那種情況下,這應該起作用。

+0

我在這裏使用了驗證規則。我想要的是當我創建或更新新記錄時,它將應用用戶輸入的值的驗證規則。規則在'validate'方法中被提及。現在,當我嘗試創建或更新新類別時,它應該檢查數據庫中具有'deleted_at = null'的'category name'的唯一性。 – 2014-10-20 06:00:01

3

您是否瞭解軟刪除目的?它只會將數據標記爲不活動。它會在那裏。

因此,如果您定義該列的值必須是唯一的,那麼您無法創建其他類似的對象。

  • 如果它需要是唯一的,那麼你應該是restoreupdate的數據。
  • 如果它可以有很多個,那麼你應該刪除應用於其上的唯一密鑰(並且通過例如關係來調用它)。

看:Laravel Eloquent Soft Deleting