php - Laravel eloquent where 方法给出不区分大小写

标签 php mysql laravel laravel-5 eloquent

在我的 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/

相关文章:

php - 如何使用 php 和 htaccess 创建 seo 友好的 url?

php - 如何自定义403异常页面?

sql - MySQL 索引的使用示例?

MySQL删除两个括号之间的字符

mysql - 使用自连接按两列分组时 SQL 查询速度较慢

javascript - 将数据传递到新的 html 窗口

php - php SESSION中的多维数组

laravel - Flutter - 使用 laravel 获取方法 api

php - Laravel 4 - 一个表单中的两个提交按钮,并且两个提交都由不同的操作处理

php - 错误 : Namespace declaration statement has to be the very first statement or after any declare call in the script