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”子句默认不区分大小写?的主要内容,如果未能解决你的问题,请参考以下文章
字符串属性的 gql 查询中不区分大小写的 where 子句
如何在 oracle sql 数据库中使 WHERE 子句不区分大小写?