Laravel唯一性验证问题

6 浏览
0 Comments

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); 失败了,它说这个用户名和电子邮件已经存在。

0
0 Comments

Laravel的默认验证规则中不包含对自定义列的搜索功能。因此,我安装了一个名为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',
);

是的,这正是我想要的,但是我忘记在我的数据库中将`username`和`email`设置为唯一的了...

0
0 Comments

Laravel唯一验证问题

在Laravel中,唯一验证是一种常见的验证规则,用于确保数据库表中的字段的值是唯一的。然而,有些开发者在使用这个规则时可能会遇到问题。下面我们来看一下这个问题出现的原因以及解决方法。

问题出现的原因:

问题是由于使用了错误的数据库表名所导致的。在Laravel中,我们在验证规则中使用unique规则时,需要指定数据库表的名称而不是模型的名称。这是因为Laravel的unique验证规则是基于数据库表的,而不是基于模型的。因此,当我们在验证规则中使用unique规则时,我们需要指定数据库表的名称。

解决方法:

要解决这个问题,我们需要在验证规则中使用正确的数据库表名。具体来说,我们需要将unique规则中的table选项设置为数据库表的名称。以下是一个示例:

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

在上面的示例中,我们将unique规则的table选项设置为"users",这是我们要验证的数据库表的名称。通过这样做,Laravel将会在验证过程中检查"user_email_one"字段的值在"users"表中是否唯一。

此外,Laravel还提供了其他选项来进一步定制unique验证规则。例如,我们可以指定要验证的字段名称(如果不指定,默认使用字段名),还可以排除某些记录的验证。这些选项可以在验证规则中使用。

在使用Laravel的唯一验证规则时,我们需要确保使用正确的数据库表名称作为unique规则的table选项。通过正确设置数据库表名称,我们可以避免出现唯一验证问题,并确保验证规则的正常工作。希望本文对你理解和解决Laravel唯一验证问题有所帮助。

参考链接:

- [Laravel文档关于验证的说明](http://laravel.com/docs/validation)

- [关于MySQL命名约定的问题](https://stackoverflow.com/questions/7899200)

0