Laravel, wyszukiwanie użytkowników

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

$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

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.

0

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

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 :) )

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

$params = explode(" ", $search);
$firstName = $params[0];
$lastName = $params[1];
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:

<?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.'%');
    }
?>

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