在我的laravel项目中,我正在使用存储库模式。我创建了以下方法,以便从品牌表中获取品牌名称。
public function getBrandByName($name){
return $this->model->where('name','=',$name)->first();
}
在品牌表中,我记录了名称=" BrandOne"。但是当我将具有区分大小写的方法称为 getBrandByName(' brandone')或 getBrandByName(' BrandOne')时,它们都给了我行。但我只需要区分大小写的记录。我怎么能这样做?
谢谢
答案 0 :(得分:5)
区分大小写是在数据库级别控制的。您在表上使用的归类确定如何处理和排序字符。不区分大小写的排序规则将大写和小写字符视为相同。
假设您正在使用MySQL,如果您的排序规则以_ci
结尾,则表示您使用的是不区分大小写的排序规则。
您可以在Laravel数据库设置中设置要使用的排序规则:
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
您可以在此处将collation
更改为区分大小写的排序规则,并且在使用此新排序规则创建表后,MySQL将以不同方式处理大写和小写字符。
以_cs
或_bin
结尾的归类通常区分大小写。
请注意,在您重新迁移数据库(或手动更改排序规则)之前,此更改不会生效,因为在创建表时会设置排序规则。
虽然可以使用MySQL进行区分大小写的比较,但我不认为Laravel支持开箱即用,因此您必须使用原始查询。
答案 1 :(得分:3)
使用DB::raw()
方法,然后:
public function getBrandByName($name){
return $this->model->where(DB::raw("BINARY `name`"), $name)->first();
}
希望这会有所帮助