2014-09-01 124 views
0

我嘗試做一個獨特的驗證我的網站的設置,但這個不起作用:Laravel獨特的驗證問題

在我的控制器:

$rules = array(
    'username' => 'required|unique:User,username,10', 
    'email' => 'required|email|unique:User,email,10', 
    'language' => 'required|in:fr,en', 
); 

我的模型:

class User extends Eloquent implements UserInterface, RemindableInterface { 

    use UserTrait, RemindableTrait; 
    protected $primaryKey = 'id_user'; 
    protected $table = 'user'; 

} 

問題是:

我的驗證器Validator::make(Input::all(), $rules, $messages);失敗,它說這個用戶名和em已經存在。

+1

** **什麼不起作用? – 2014-09-01 20:19:01

+0

我的驗證'驗證::化妝(輸入::所有的(),$規則,$消息);'失敗,它說,這個用戶名和電子郵件已經存在。 – user3207586 2014-09-01 20:25:12

+0

「用戶名」和「電子郵件」在數據庫中被定義爲唯一的嗎?並且最後一個參數'10'可以忽略'id_user' 10.這就是你想要的嗎? – 2014-09-01 21:03:29

回答

1

不同意與回答自己的問題:

「Laravel不這樣做來搜索一個自定義列「。

這是不正確的。

準確地說:沒有什麼不好的,使用一個插件...


見遷移文件的重要組成部分(應用/數據庫/遷移):

// creates a DB-table named 'users' 
    Schema::create('users', function (Blueprint $t) { 
     $t->increments('id'); 
     $t->timestamps(); 
     // ... Here a unique field 
     $t->string('user_email_one', 255)->unique(); 
     // ... 
    }); 

UserController中的相關驗證規則:

 $rules = array(
     'user_email_one' => 'required|email|unique:users', 
     // ... 
    ); 

Laravel正在做它的工作。


隨着unique:你必須調用數據庫表名,而不是模型名。

BTW:你所選擇的插件做到這一點...

The Laravel docs about validation

獨特:表,列,除非,idColumn

場下驗證在給定的數據庫表上必須是唯一的。

如果未指定列選項,將使用字段名稱。


正如有關命名一個MySQL表'User''user''users',這可能會引起你的錯誤的有趣的信息。參觀這個問題:

Is there a naming convention for MySQL?通過StackOverflowNewbie要求,通過Tom Mac(最高票&接受的答案)回答

0

Laravel沒有在自定義列中進行搜索。

所以我已經安裝了這個插件https://github.com/felixkiss/uniquewith-validator誰做的工作非常好:

$rules = array(
    'username' => 'required|alpha_dash|unique_with:user,username,10 = id_user', 
    'email' => 'required|email|unique_with:user,email,10 = id_user', 
    'language' => 'required|in:fr,en', 
); 
+0

是啊,這就是我想要的,但我忘了做'username'和我的數據庫'email'獨特的... – user3207586 2014-09-01 21:36:48