mysql - 用户列表过滤,返回空对象
问题描述
我有两个 list-filtering inputs
,如果单独使用它们可以完美地工作,但是当一起使用时它会返回一个空对象。
过滤器包含一个简单的搜索Input
字段和一个select
.
它们触发对服务器的 API 调用,使用时两者看起来像这样
http://127.0.0.1:8000/api/user?&search=jom&type=admin
这个method
调用触发器看起来像这样
public function index(Request $request) {
$search = $request->input('search');
$type = $request->input('type');
$user = User::select('*');
$this->checkSearch($user, $search); // check for search
$this->filterUserType($user, $type); // filter user type
...
method
checkSearch
看起来像这样
private function checkSearch(&$query, $search) {
if (!isset($query)) {
return $query;
}
if (!is_null($search)) {
$searchTerms = $this->stringToArray($search, ' ');
$query = $query->where(function ($query) use ($searchTerms) {
for ($i = 0, $max = count($searchTerms); $i < $max; $i++) {
$term = str_replace('_', '\_', mb_strtolower('%' . $searchTerms[$i] . '%'));
$query->whereRaw("(Lower(name) LIKE ?)", [$term, $term])
->orWhereRaw("(Lower(bio) LIKE ?)", [$term, $term]);
}
});
}
}
和filterUserType
这样的
private function filterUserType(&$query, $type) {
if (!isset($query)) { return $query; }
if (!is_null($type)) {
$query = $query->where( 'type', $type);
}
}
我试图检查where
方法filterUserType
,orWhere
但这只是返回两个未组合的值。
解决方案
我触发了原始查询的中断,它看起来像这样
select * from `users` where ((Lower(name) LIKE %jom%) or (Lower(bio) LIKE %jom%)) and `type` = %jom%)
当我切换方法时,我得到了正确的结果。切换自
$this->checkSearch($user, $search); // check for search
$this->filterUserType($user, $type); // filter user type
至
$this->filterUserType($user, $type); // filter user type
$this->checkSearch($user, $search); // check for search
仍然不知道为什么,但它工作
推荐阅读
- python - 如何使用 Selenium Webdriver 在 Chrome 中关闭下载弹出窗口?
- php - 通过两个字段查询以使用 PHP 在 Firebase 中登录
- javascript - React-Webcam:我该如何解决“对象可能是‘空’。” 和“类型'null'不能分配给类型'string | undefined'。”?
- python - 如何在 Python 中将会话和 cookie 从请求库加载到 Selenium 浏览器?
- c - 关于“指向结构或联合的指针”类型的混淆
- r - lme4 偏差/处理对比编码与 R 中的交互 - 缺少水平
- python - 在哪些情况下可以接受不将导入放在 Python 的顶部?
- docker - 无法使用 docker-compose 从 docker 容器内部访问 https://localhost:3000 但可以通过 Mac 上的 DNS 名称访问
- c# - 通过 C# windows 应用程序将值插入数据库多个表
- ios - 按类别及其子元素填充列表