Laravel雄辩的方法给出了不区分大小写的方法

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')时,它们都给了我一行,但是我只需要获取区分大小写的记录即可。我怎样才能做到这一点?

谢谢

Jon*_*hon 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,
    ],
Run Code Online (Sandbox Code Playgroud)

您可以collation在此处更改为区分大小写的排序规则,并使用新的排序规则创建表后,MySQL将以不同的方式对待大写和小写字符。

排序规则以区分大小写结尾_cs_bin通常区分大小写。

但是请注意,由于在创建表时设置了排序规则,因此除非您重新迁移数据库(或手动更改排序规则),否则此更改将不会生效。


虽然可以使用MySQL进行区分大小写的比较,但是我认为Laravel不支持对它进行开箱即用,因此您必须对其使用原始查询。


Mal*_*dze 5

使用DB::raw()方法然后:

public function getBrandByName($name){
   return $this->model->where(DB::raw("BINARY `name`"), $name)->first();
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助