首页 > 解决方案 > Laravel:查找完全匹配,区分大小写

问题描述

此代码有效,但对大小写不敏感。

    public function search(){

        if ($search = \Request::get('q')) {
            $patrons = Patron::where(function($query) use ($search){
                $query->where('barcode','=',"$search")

            })->paginate(20);
        }else{
            $patrons = Patron::latest()->paginate(5);
        }

        return $patrons;
    }

例子

搜索“banana123”不应等于“BaNaNa123”,应返回 0。

我们怎样才能使搜索完全匹配?谢谢你。

标签: sqllaravelvue.js

解决方案


你必须使用 BINARY

use DB;
...
public function search(){
    if ($search = \Request::get('q')) {
        $patrons = Patron::where(function($query) use ($search){
            $query->whereRaw("BINARY `barcode` = '$search'");
            // or
            // $query->where(DB::raw("BINARY `barcode`), $search);
        })->paginate(20);
    }else{
        $patrons = Patron::latest()->paginate(5);
    }

    return $patrons;
}

此外,如果您使用一个 where 而不是将其链接到其他条件,则您不需要在 where 中使用函数。你可以简单地写:

use DB;
...
public function search(){
    if ($search = \Request::get('q')) {
        $patrons = Patron::where(DB::raw("BINARY `barcode`"), $search)->paginate(20);
    }else{
        $patrons = Patron::latest()->paginate(5);
    }

    return $patrons;
}

推荐阅读