在我的 Laravel 项目中,我使用存储库模式。我创建了以下方法来通过品牌表中的名称获取品牌。
public function getBrandByName($name){
return $this->model->where('name','=',$name)->first();
}
在品牌表中,我有名称=“BrandOne”的记录。但是,当我将区分大小写的方法调用为 getBrandByName('brandone') 或 getBrandByName('BrandOne') 时,它都会给我行。但我只需要获取记录时区分大小写。我怎样才能做到这一点?
谢谢
最佳答案
区分大小写是在数据库级别控制的。您在表中使用的排序规则决定了字符的处理和排序方式。不区分大小写的排序规则将大写和小写字符视为相同。
假设您使用的是 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,
],
您可以将此处的排序规则
更改为区分大小写的排序规则,一旦使用此新排序规则创建了表,MySQL 将以不同的方式处理大写和小写字符。
以 _cs
或 _bin
结尾的排序规则通常区分大小写。
但请注意,只有在您重新迁移数据库(或手动更改排序规则)后,此更改才会生效,因为排序规则是在创建表时设置的。
<小时/>虽然可以使用 MySQL 进行区分大小写的比较,但我认为 Laravel 不支持开箱即用,因此您必须使用原始查询。
关于php - Laravel eloquent where 方法给出不区分大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50720865/