下面的代码是获取用户的方法,但只返回一个用户。
例如,如果我输入users?filter=michaele+jessy
,我想让两个用户的名字和姓氏分别为michaele或jessy。
我正在研究后端的东西。我可以简单地从users
或users/{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);
}
答案 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);
}