Próbuję dostać użytkowników podmiotu przy użyciu relacji

$users = $entity->users()->paginate(20);

Ale teraz chcę uruchomić wiele, gdzie warunki w zależności od parametrów wysłanych do API, więc jeśli to zrobię

$users = $entity->users();
//$users->where($where_array)
$users->paginate(20);

Wychodzę z błędu pamięci. Najpierw dostaje wszyscy użytkownicy próbuje paginować (skomentował tam, gdzie warunek), więc jak mogę podzielić to zapytanie do wielu linii i uruchomić go na końcu bez użycia DB Query

Przykład tego, co chcę zrobić, ale w zależności od wysłanych parametrów nie ustalonych parametrów

$user->posts()
    ->where('active', 1)
    ->orWhere('votes', '>=', 100)
    ->get();

Więc sprawdzam

if(!empty($request->first_name)){
  ->where('first_name', 'like', '%'.$request->first_name.'%')
}

I tak dalej. Próbowałem tego

$where = "";

    $like_parameters = array(
        'first_name', 'last_name', 'email', 'phone'
    );

    foreach ($like_parameters as $parameter){
        if(isset($request->$parameter) &&!empty($request->$parameter)){
            $where .= "->where('$request->$parameter', 'like', '%'.$request->$parameter.'%')";
        }
    }
    
    $users = $entity->users().$where->paginate($per_page);

I dostaję Call to a member function paginate() on string, więc chcę wiązać $where do zapytania, ale nie jako ciąg, ale w ramach tego samego zapytania.

0
PHP User 26 październik 2020, 11:26

1 odpowiedź

Najlepsza odpowiedź

Możesz kontrolować budownicę zapytania i dodać wiele "gdzie" tak długo, jak nie pobierałeś wyniku z DB, używając (Get, znajdź ....)

 $query=  $user->posts()
            ->where('active', 1)
            ->orWhere('votes', '>=', 100);

        if(!empty($request->first_name)){
            $query=$query->where('first_name', 'like', '%'.$request->first_name.'%');
            }

Kiedy ustawisz cały swój stan i zbudować zapytanie, gdy chcesz, możesz pobrać wyniki:

        $results=$query->get();
2
OMR 26 październik 2020, 08:49