Laravel“where”子句默认不区分大小写?

Posted

技术标签:

【中文标题】Laravel“where”子句默认不区分大小写?【英文标题】:Laravel "where" clause is case insensitive by default? 【发布时间】:2021-02-27 21:12:43 【问题描述】:

今天出人意料的是,我很震惊 Laravel 8 雄辩的 WHERE 子句不敏感。

我怎样才能让它再次敏感?

这是我的代码 路线/web.php

Route::get('/slang', function($slang) 
    $post = App\Models\Post::where('slang', $slang)->first();
    if( ! isset( $post->id ) ) return redirect('/');
    return 
response()->json(['content' => 'Welcome to ['. $post->slang.']', 'code'=>200, 'var'=>$slang] );
);

结果

content:"Welcome to [DAL51]"
code:   200
var:    "dAl51"

【问题讨论】:

我输入了 //domain/dAl51 并且在帖子表中的俚语是 DAL51 这听起来更像是你的数据库而不是 laravel 的变化。你的 mysql 默认字符集和排序规则是什么? 您需要使用 DB::raw(),例如 App\Models\Post::where(DB::raw('BINARY slang'), $slang)->first();App\Models\Post::whereRaw("BINARY slang = '$slang'")->first(); @sta 完美运行 这能回答你的问题吗? Case-sensitive where statement in laravel 【参考方案1】:

您需要使用DB::raw(),例如:

App\Models\Post::where(DB::raw('BINARY slang'), $slang)->first();

或者,您可以使用whereRaw() 方法:

App\Models\Post::whereRaw('BINARY slang=?', $slang)->first();

【讨论】:

感谢@sta,我会推荐第二个选项,并进行一些更改 ''App\Models\Post::whereRaw('BINARY slang=?', $slang)->first(); ''

以上是关于Laravel“where”子句默认不区分大小写?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel JSON where 子句不区分大小写

字符串属性的 gql 查询中不区分大小写的 where 子句

如何在 oracle sql 数据库中使 WHERE 子句不区分大小写?

在带有 LINQ to XML 的 VB.NET 中,where 子句在属性值和字符串之间设置不区分大小写的比较

在WHERE子句中确定区分大小写

Laravel 查询不使用 where 子句作为日期