laravel雄辩的where方法没有区分大小写

yacmzcpb  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(691)

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

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

在brand表中,我有name=“brandone”的记录。但是当我调用区分大小写的方法getbrandbyname('brandone')或getbrandbyname('brandone')时,它都会给出行,但我只需要获取区分大小写的记录。我该怎么做?
谢谢您

9wbgstp7

9wbgstp71#

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

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

希望这有帮助

zwghvu4y

zwghvu4y2#

区分大小写是在数据库级别控制的。表中使用的排序规则决定了字符的处理方式和顺序。不区分大小写的排序规则将大写和小写字符视为相同的字符。
假设您使用的是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不支持开箱即用的比较,因此必须使用原始查询。

相关问题