搜索查询仅返回一个用户

时间:2019-05-13 10:56:43

标签: laravel eloquent

下面的代码是获取用户的方法,但只返回一个用户。 例如,如果我输入users?filter=michaele+jessy,我想让两个用户的名字和姓氏分别为michaele或jessy。

我正在研究后端的东西。我可以简单地从usersusers/{id}之类的控件中获取json数据,但是如何制作具有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 个答案:

答案 0 :(得分:2)

您在这里遇到一些问题。首先,您explode()在爆炸,而不是+

将其更改为+可能会解决正确创建terms数组以正确搜索users表的问题。

第二,您的foreach总是使用->get()完成查询。完成查询时,您仅应使用->get()。您应该使用以下命令开始用户查询:

$users = User::newQuery();

然后启动您的foreach并遍历每个$term以查询->where()->orWhere()的名字/姓氏。

一旦遍历了所有$terms,而不是foreach运行:

$users = $users->get();

答案 1 :(得分:0)

由于 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);
    }