Wyszukiwanie danych w tabeli w zalezności od wpisanych pól

0

Mam taki problem ja wiem jak to zrobić, ale nie wiem jak to zrobić prościej i na modelach w laravel mam taki problem ma wyszukać pacjenta według takichy danych jak imię i nazwisko, ale w momencie kiedy się nie poda imeiniea lub nazwiska to wszystkie wyszukuje.

    private function select_patients_search($name = "",$lastname = "",$sort = "") {
        $patients = new \App\Patient();
        //$select = $patients->whwreRaw();
        $where = "";
        if ($name != "") $where .= " name = '$name'";
        
    }

No i teraz tutaj bym zrobił to przez where/Raw i potem spradzłbym czy w ostatnim warunku nie ma and jak jest to usnunął, ale ja chcę to zrobić przez model_>where('name','imie')->.where("nazwisko,"nazwisko")
Tylko nie wiem jak podołączać te where w zalezności od warunków.

0

A coś w stylu:

if (!empty($name) && !empty($lastname)) {
    $where .= " name = '$name' AND lastname = '$lastname'";
}

?

1

To jeden sposób rozwiązania tego, da się to jeszcze bardziej uprościć abstrakcją (jak nie chcesz samemu abstrakcji pisać to możesz poszukać paczek).

$patients = \App\Patient::query();

if(isset($name){
    $patients->where('name', $name)
}

if(isset($lastname){
    $patients->where('last_name', $lastname);
}

$patients->get();

lub za pomocą scope możesz przekazać parametr i zrobić ten sam warunek co tutaj, różnica taka że przenosisz logikę do modelu z controllera, a w controllerze zostaje Ci np.

$patients = \App\Patients::searchName($name)->searchLastName($lastName)->get();

no ale tutaj jeszcze lepszą opcją byłoby sprowadzenie to do takiej postaci:

$patients = $patientsRepository->search($request->all())->get();

gdzie pola po których można szukać masz zdefiniowane w klasie z konkretnym repozytorium, więc zarówno controller jak i model zostają czyste, logika szukania wypchnięta jako abstrakcja do jakiejś bazowej klasy "repository" po której dziedziczy Ci te konkretne repozytorium.
Itd. itd. zależy jak bardzo chcesz to rozbijać i jakie podejście sobie zastosujesz.

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