Laravel: поиск точного соответствия с учетом регистра - PullRequest
0 голосов
/ 13 апреля 2020

Этот код работает, но он не чувствителен к регистру / заглавным буквам.

    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» и должен return 0.

Как мы можем сделать поиск точным соответствием? Спасибо.

1 Ответ

1 голос
/ 13 апреля 2020

Вы должны использовать 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;
}

Также, если вы используете тот, где и не приковывает его к другим условиям, вам не нужно использовать функцию внутри где. Вы можете просто написать:

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...