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

Laravel 5.6中替代GOTO语句的更优代码实现方案

替代Laravel中GOTO语句的优雅重构方案

看到你在Laravel 5.6里用GOTO来处理查询逻辑,确实GOTO很容易让代码变得混乱难维护。咱们可以利用Laravel查询构造器的链式特性,把逻辑拆解成更清晰的步骤,完全不需要GOTO就能实现相同功能,代码还更易读。

重构后的代码

public function job_finished_search(Request $request)
{
    $rFrom = $request->input('datepicker_from');
    $rTo = $request->input('datepicker_to');
    $rName = $request->customer_name;

    // 处理三个参数都为空的边界情况
    if (is_null($rFrom) && is_null($rTo) && is_null($rName)) {
        Flash::error('Search result not found');
        return redirect(route('pdf.index'));
    }

    // 初始化基础查询(提取所有分支的共同逻辑)
    $query = Job::onlyTrashed()
        ->where('is_trash', 0)
        ->orderBy('created_at', 'desc');

    // 根据参数存在情况,链式添加过滤条件
    if (!is_null($rName)) {
        $query->where('customer_name', $rName);
    }

    if (!is_null($rTo)) {
        $query->where('created_at', '<=', Carbon::parse($rTo)->endOfDay());
    }

    if (!is_null($rFrom)) {
        // 补充原代码未完整展示的起始日期过滤逻辑,可根据实际需求调整
        $query->where('created_at', '>=', Carbon::parse($rFrom)->startOfDay());
    }

    // 获取目标ID集合(对应原代码的A点逻辑)
    $job_ids = $query->pluck('id')->all();

    // 后续业务逻辑继续在这里编写...
}

重构的核心优势

  • 逻辑更清晰:把参数判断和查询构建分离,每个参数的过滤规则独立成块,一眼就能看懂每个参数对应的作用
  • 符合Laravel最佳实践:充分利用查询构造器的链式调用特性,这也是Laravel官方推荐的查询构建方式
  • 可维护性更高:后续新增过滤参数时,只需添加对应的条件判断和查询语句即可,不用再嵌套复杂的if分支或依赖GOTO跳转
  • 可读性更强:线性的执行流程让其他开发者更容易理解和调试代码,避免了GOTO带来的“跳跃式”代码混乱

内容的提问来源于stack exchange,提问作者JsWizard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:27:17