Laravel, wyszukiwanie użytkowników

Laravel, wyszukiwanie użytkowników
M2
  • Rejestracja:ponad 7 lat
  • Ostatnio:około rok
  • Postów:362
0

Cześć, mam pewien problem z wyszukiwaniem użytkowników w Laravel po imieniu i nazwisku.
Imię i nazwisko w bazie mam zapisane w osobnych tablach (name i last_name)
Szukam tego w ten sposób

Kopiuj
$users = User::where('name', 'like', '%' . $search . '%')
                ->orWhere('last_name', 'like', '%' . $search . '%')
                ->orderBy('id', 'DESC')
                ->paginate(20);

i to działa jeśli wpiszę imię lub nazwisko kiedy wpiszę pełną nazwę np. Test Test już nie znajduje użytkowników

L7
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 3 godziny
  • Postów:433
0

Imię i nazwisko masz w osobnych kolumnach a do zmiennej $search przekazujesz stringa Test Test. Raczej żaden name i last_name nie zawierają takiego stringa.

M2
  • Rejestracja:ponad 7 lat
  • Ostatnio:około rok
  • Postów:362
0

muszę w bazie zrobić nową kolumnę np. fullname lub imię i nazwisko zapisywać w name?

L7
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 3 godziny
  • Postów:433
0

Nie, to by było bez sensu. Raczej musisz "rozbić" stringa po spacji (o ile oczywiście się da) i wtedy masz $search w tablicy i masz DWIE zmienne do sprawdzenia w dwóch kolumnach co daje cztery warunki :) (chyba, bo piszę z telefonu i na szybko :) )

Pipes
  • Rejestracja:około 11 lat
  • Ostatnio:ponad 3 lata
  • Postów:459
0

Jeśli $search to np. Jan Kowalski to musisz zrobić [$firstName, $lastName] = explode(" ", $search).

Jeśli masz starszego pehapca niż 7.1 (https://www.php.net/manual/en/migration71.new-features.php), to po staremu

Kopiuj
$params = explode(" ", $search);
$firstName = $params[0];
$lastName = $params[1];
edytowany 1x, ostatnio: Pipes
L7
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 3 godziny
  • Postów:433
0

Też niezbyt dobry pomysł. A co będzie jak ktoś wpisze coś na zasadzie "Jan Kowalski Iksiński" ? Ja bym zrobił to jakoś w ten sposób:

Kopiuj
<?php
    $searchInput = "jan kowalski john doe";
    $searchInput = explode(" ", $searchInput);

    $result = DB::table('users');
    foreach ($searchInput as $element) {
        $result->orWhere('name', 'like', '%'.$element.'%');
        $result->orWhere('last_name', 'like', '%'.$element.'%');
    }
?>
edytowany 1x, ostatnio: leonpro778
Pipes
Ja nie napisałem jak robić zapytanie na bazie, tylko explode ;)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.