2014-09-01 128 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