PHP - laravel like częściowo nie działa

0

Mam taki problem mam kod w laravelu i on dla niektórych rezultatów nie wyszukuje a ręcznie w sql się da google nic nie mówi na ten temat dam kod

        $Pes = \App\Pes::query();
        
        if ($type == 0 and $numer != "") {
           $Pes->where("numer",$numer);
        }
        else  if ($type != 0) {
            $Pes->where("id",$numer);
        }
        if (Input::get("name") != "") {
            $name = Input::get("name");
            $Pes->whereRaw("nazwa like  " . "'%" . $name. "%'" );
            //$Pes->whereLike("nazwa",$name);
        }
        $record = $Pes->get();
0

Co to znaczy dla niektórych? Czym się te niektóre wyróżniają?

0
$name = 'Kamil';
$Pes->whereRaw("nazwa like  " . "'%" . $name. "%'" ); 
$Pes->whereLike("nazwa",$name);

Pierwsze to taki warunek:

SELECT * FROM tabela WHERE nazwa like '%Kamil%'

Natomiast drugie, to:

SELECT * FROM tabela WHERE nazwa like 'Kamil' -- czyli to samo co WHERE nazwa = 'Kamil'

W drugim przypadku Laravel nie dodaje automatycznie %, bo niby skąd miałby wiedzieć, czy powinien dodać na początku, na końcu, czy i tu, i tu (albo w środku! bo też tak można)? W pierwszy sam dodajesz %, dlatego działa.

Warto dodać, że używanie % na początku może znacznie zmniejszyć wydajność takiego zapytania, bo z tego co się orientuję SQL nie używa wtedy indeksów. Możliwe, że są jakieś tam zaawansowane optymalizatory, ale raczej nie w mysqlu. Więc o ile wystarczy Ci sam % na końcu, bo na przykład masz kolumnę z imieniem i nazwiskiem, a szukasz wszystkich Kamilów, to takie query like 'Kamil%' jest lepsze niż like '%Kamil%'

https://use-the-index-luke.com/sql/where-clause/searching-for-ranges/like-performance-tuning

0

Jak nie wiesz co się dzieje w zapytaniach to polecam tę paczkę https://github.com/mnabialek/laravel-sql-logger, do logu ci zrzuca zapytania, przydaje się przy pracy z api, gdy nie można debugbara podpiąć.

0

Teraz jest jeszcze coś dziwniejszego zauwazyłem, że jest w bazie słowo DIBROMODIFLUOROMETAN po którym midz innymi szuka i teraz jak wpiszę w formularzu IBROMODIFLUOROMETA to nie wyszuka, ale jak wpiszę np. MODIFLUOROM to wyszuka

0

zainstaluj tą paczkę i zobacz jaki się sql generuje będziesz wiedział co masz schrzanione.

0

Wywal spacje z wartości z inputa. Jeżeli dodasz ją to like Ci już nic nie znajdzie.

0

Ja jestem na 90 % pewny, że to czy wyszuka zależy od długości strina frazy.

0

Sprawdź na bezpośrednio na bazie, czy faktycznie tak jest.

1 użytkowników online, w tym zalogowanych: 0, gości: 1