Laravel雄辩,方法在没有案例敏感的情况下提供

时间:2018-06-06 12:49:41

标签: laravel laravel-5 eloquent

在我的laravel项目中,我正在使用存储库模式。我创建了以下方法,以便从品牌表中获取品牌名称。

public function getBrandByName($name){
   return $this->model->where('name','=',$name)->first();
}

在品牌表中,我记录了名称=" BrandOne"。但是当我将具有区分大小写的方法称为 getBrandByName(' brandone') getBrandByName(' BrandOne')时,它们都给了我行。但我只需要区分大小写的记录。我怎么能这样做?

谢谢

2 个答案:

答案 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();
}

希望这会有所帮助