Laravel PHP 在字符串中使用路由参数实现接口条件查询的问题
问题解决办法
你遇到的返回[false]问题可以通过以下几个修改点解决:
- 原代码未将路由参数加入过滤逻辑,且额外给返回结果套了一层多余数组
- 缺少认证成功校验,认证失败会导致后续查询返回
false - 可选参数需要做非空判断,仅在传值时追加对应过滤条件
修正后的路由代码
Route::get('/groups/{ministry?}/{dayOfWeek?}/{gender?}', function ($ministry = null, $dayOfWeek = null, $gender = null) { $mp = new \MinistryPlatformAPI\MinistryPlatformTableAPI(); // 校验认证结果,避免认证失败导致查询返回false if (!$mp->authenticate()) { return response()->json(['error' => '接口认证失败'], 500); } $baseFilter = 'Congregation_ID = 1 AND End_Date > GETDATE()'; $conditionArr = [$baseFilter]; // 动态追加可选过滤条件,参数强制转int避免SQL注入 if (!is_null($ministry)) { $conditionArr[] = 'Ministry_ID = ' . (int)$ministry; } if (!is_null($dayOfWeek)) { $conditionArr[] = 'Day_Of_Week = ' . (int)$dayOfWeek; } if (!is_null($gender)) { $conditionArr[] = 'Gender = ' . (int)$gender; } $finalFilter = implode(' AND ', $conditionArr); $groups = $mp->table('Groups') ->select('*, dp_fileUniqueId AS FileID') ->filter($finalFilter) ->orderBy('Start_Date DESC') ->get(); // 直接返回查询结果,无需额外包裹数组 return response()->json($groups); });
额外注意事项
- 如果你的
Ministry_ID/Day_Of_Week/Gender字段不是数值类型,可根据实际字段类型调整参数转换规则 - 前端接收到的返回结果会直接是分组列表数组,不需要再从第一层数组里取数据
内容的提问来源于stack exchange,提问作者Cdrew92
相关产品推荐
相关产品推荐

