首页 > 解决方案 > 搜索查询只返回一个用户

问题描述

下面的代码是获取用户的方法,但它只返回一个用户。例如,如果我输入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);
    }

标签: laraveleloquent

解决方案


你这里有几个问题。首先,你是explode()被一个空的空间而不是一个+.

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

其次,您的 foreach 始终使用->get(). 您应该只->get()在完成查询时使用。您应该使用以下命令开始您的用户查询:

$users = User::newQuery();

然后开始你的foreach并循环遍历每个$term查询->where()->orWhere()first_name/last_name。

一旦它遍历 all $terms,在 foreach 运行之外:

$users = $users->get();

推荐阅读