Dee*_*tha 2 laravel eloquent laravel-5
在我的laravel项目中,我正在使用存储库模式。我创建了以下方法来从品牌表中按名称获取品牌。
public function getBrandByName($name){
return $this->model->where('name','=',$name)->first();
}
Run Code Online (Sandbox Code Playgroud)
在品牌表中,我有名称=“ 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,
],
Run Code Online (Sandbox Code Playgroud)
您可以collation在此处更改为区分大小写的排序规则,并使用新的排序规则创建表后,MySQL将以不同的方式对待大写和小写字符。
排序规则以区分大小写结尾_cs或_bin通常区分大小写。
但是请注意,由于在创建表时设置了排序规则,因此除非您重新迁移数据库(或手动更改排序规则),否则此更改将不会生效。
虽然可以使用MySQL进行区分大小写的比较,但是我认为Laravel不支持对它进行开箱即用,因此您必须对其使用原始查询。
使用DB::raw()方法然后:
public function getBrandByName($name){
return $this->model->where(DB::raw("BINARY `name`"), $name)->first();
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |