You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel PHP 在字符串中使用路由参数实现接口条件查询的问题

问题解决办法

你遇到的返回[false]问题可以通过以下几个修改点解决:

  1. 原代码未将路由参数加入过滤逻辑,且额外给返回结果套了一层多余数组
  2. 缺少认证成功校验,认证失败会导致后续查询返回false
  3. 可选参数需要做非空判断,仅在传值时追加对应过滤条件

修正后的路由代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 02:27:02