我正在使用Laravel 4.1和PostgreSQL作为数据库编写web应用程序。
由于数据库区分大小写,但是我希望它不区分大小写,因为例如,当用户登录时,他应该能够使用大写或小写的电子邮件地址访问(就像在其他网站上一样)。但是,密码哈希列必须区分大小写,因为我使用的加密方法生成区分大小写的字符串。
我正在使用Laravel的Eloquent ORM,因此我不直接编写查询语句。
我该如何解决这个问题?
提前感谢!
我正在使用Laravel 4.1和PostgreSQL作为数据库编写web应用程序。
由于数据库区分大小写,但是我希望它不区分大小写,因为例如,当用户登录时,他应该能够使用大写或小写的电子邮件地址访问(就像在其他网站上一样)。但是,密码哈希列必须区分大小写,因为我使用的加密方法生成区分大小写的字符串。
我正在使用Laravel的Eloquent ORM,因此我不直接编写查询语句。
我该如何解决这个问题?
提前感谢!
有点晚了,但这很简单。只需使用“ILIKE”运算符,例如:
User::where("email", "ILIKE", $email)->get();
我曾经遇到过这个问题,我的解决方案是“假装”不区分大小写:
1)在相关方法中添加一行代码,将输入的电子邮件值转换为小写
2)在数据库中进行替换,使电子邮件变成小写
3)确保新的电子邮件以小写形式输入
细节如下:
1)相关方法*是核心Laravel代码,因此您可以使用新版本覆盖它们,以在验证请求后替换电子邮件值: $request['email'] = Str::lower($request['email']);
2)更新用户设置电子邮件= lower(email);
3)对于我来说,这很容易,因为我自己创建所有用户(我的网站只是为家庭服务),但您可以在身份验证流程中执行类似的操作
希望这可以帮助到您!
lower(email_address)
创建索引?还是在输入时规范化您的电子邮件地址? - Rup