【问题标题】:Laravel "where" clause is case insensitive by default?Laravel“where”子句默认不区分大小写?
【发布时间】: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

标签: mysql laravel eloquent laravel-8


【解决方案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(); ''
猜你喜欢
  • 2016-09-03
  • 2020-12-06
  • 2014-10-19
  • 2016-11-26
  • 1970-01-01
  • 2021-01-27
  • 1970-01-01
  • 2011-10-16
  • 2015-08-31
相关资源
最近更新 更多