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

如何使用Laravel查询构建器实现带CASE条件的JOIN关联查询

Laravel Query Builder 转换方案

方法1:原生逻辑对齐实现(可读性最高)

直接用DB::raw封装CASE语句,和你提供的原生SQL逻辑完全一致:

$query = DB::table('table_1')
    ->join('table_2', 'table_1.id', '=', 'table_2.id')
    ->join('table_3', DB::raw('
        CASE
            WHEN {some condition}
            THEN table_1.id
            ELSE table_2.id
        END
    '), '=', 'table_3.id')
    ->get();

将代码中的{some condition}替换为实际业务条件即可,比如table_1.is_valid = 1这类合法SQL表达式。

方法2:安全参数绑定实现(避免SQL注入)

如果判断条件包含外部传入的动态参数,使用参数绑定保证查询安全:

// 示例动态条件:table_1.status = 用户传入的状态值
$inputStatus = request('status'); // 外部传入变量示例
$query = DB::table('table_1')
    ->join('table_2', 'table_1.id', '=', 'table_2.id')
    ->join('table_3', DB::raw('
        CASE
            WHEN table_1.status = ?
            THEN table_1.id
            ELSE table_2.id
        END
    '), '=', DB::raw('table_3.id'))
    ->addBinding($inputStatus, 'join')
    ->get();

若使用Eloquent模型查询,仅需将开头的DB::table('table_1')替换为对应模型的YourModel::query(),后续join逻辑完全通用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:18:01