laravel - 搜索查询只返回一个用户
问题描述
下面的代码是获取用户的方法,但它只返回一个用户。例如,如果我输入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);
}
解决方案
你这里有几个问题。首先,你是explode()
被一个空的空间而不是一个+
.
将其更改为按 a 展开+
可以解决正确创建terms
数组以users
正确搜索表的问题。
其次,您的 foreach 始终使用->get()
. 您应该只->get()
在完成查询时使用。您应该使用以下命令开始您的用户查询:
$users = User::newQuery();
然后开始你的foreach
并循环遍历每个$term
查询->where()
或->orWhere()
first_name/last_name。
一旦它遍历 all $terms
,在 foreach 运行之外:
$users = $users->get();
推荐阅读
- c++ - 快速排序算法引发堆栈转储错误的 C++ 运行时错误
- python - 需要在python中迭代字典列表并仅以列表形式获取dict的值
- ios - 目标 C - 不知道用于选择的类方法
- python - django viewset 扩展 mixins.UpdateModelMixin 但邮递员通过补丁方法更新模型返回'细节:不允许方法补丁'
- python - 我在这个带有 pool.map 的文件中做错了什么,导致什么都没有出现,我必须重新启动 shell?
- html - 第一行和第二行之间有间隙的自定义单选按钮
- vue.js - 注销时清除 nuxt 存储和所有子模块
- c# - 卡在 HttpPost 方法上,试图输入 JSON 文本,但对象应该是“空的”
- aws-lambda - 如何根据请求主体变量/项目执行不同的 aws lambda(aws api 网关)
- bing - 需要防止网站链接显示在 Bing 搜索结果中