поисковый запрос возвращает только одного пользователя - PullRequest
0 голосов
/ 13 мая 2019

Код ниже - это метод получения пользователей, но он возвращает только одного пользователя.Например, если я введу users?filter=michaele+jessy, я хочу, чтобы у двух пользователей были имя и фамилия michaele или jessy.

Я изучаю бэкенд.Я могу просто создавать данные json из таких контроллеров, как users или users/{id}, но как мне сделать контроллеры и маршруты, имеющие users/{id}/addresses.Я исследую это, но не могу найти хороших примеров.

Спасибо.

public function getUsers($parameters){

        if (empty($parameters)) {
            return $this->filterUsers(User::all());
        }
        if (isset($parameters['filter'])) {
            $terms = explode(' ', $parameters['filter']);


            foreach ($terms as $term) {

                $users = User::where('first_name', 'like', '%' . $term . '%')->orWhere('last_name', 'like', '%' . $term . '%')->get();
            }
            return $this->filterUsers($users);
        }

        $whereclause = $this->getWhereClause($parameters);


        $users = User::where($whereclause)->get();
        return $this->filterUsers($users);
    }

Ответы [ 2 ]

2 голосов
/ 13 мая 2019

У вас есть несколько вопросов здесь. Во-первых, вы explode() взрываетесь пустым пространством, а не +.

Изменение этого значения на + может решить проблему правильного создания массива terms для правильного поиска в таблице users.

Секонд, вы всегда выполняете запрос, используя ->get(). Вы должны использовать ->get() только при завершении запроса. Вы должны начать свой пользовательский запрос, используя:

$users = User::newQuery();

Затем запустите foreach и выполните цикл по каждому $term, чтобы запросить ->where() или ->orWhere() first_name / last_name.

После прохождения всех $terms вне цикла foreach:

$users = $users->get();
0 голосов
/ 14 мая 2019

Благодаря предложению thisisKelvins я сделал код более упорядоченным. Тем не менее у меня есть проблема, возвращая только один результат. Код выглядит так.

public  function getUsers($parameters)
    {


        if (empty($parameters)) {
            return $this->filterUsers(User::all());
        }
        if (isset($parameters['filter'])) {
            $terms = explode(' ', $parameters['filter']);

            foreach ($terms as $term) {

                $users = User::query()->where('first_name', 'like', '%' . $term . '%')->orWhere('last_name', 'like', '%' . $term . '%');
            }
            $users = $users->get();

            return $this->filterUsers($users);
        }

        $whereclause = $this->getWhereClause($parameters);
        $users = User::where($whereclause)->get();
        return $this->filterUsers($users);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...