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

Laravel 9 Query Builder转换MS Access SQL语句需求

Access SQL转Laravel 9 Query Builder实现

原Access SQL语句

SELECT tblSU.Site, tlkpSUDesc.ESR_SUcat, tlkpSUDesc.ESR_SUcatdisp, tlkpSUDesc.SUDesc, tlkpSUTyp.SUTyp, tblSU.SUNum
FROM tlkpSUTyp RIGHT JOIN (tlkpSUDesc RIGHT JOIN tblSU ON tlkpSUDesc.SUDescCode = tblSU.SUDescCode) ON tlkpSUTyp.SUTypCode = tblSU.SUTypCode
WHERE (((tblSU.Site)='[Site参数]') AND ((tlkpSUDesc.ESR_SUcat)='[Crit参数]') AND (Not (tblSU.SUTypCode)='GEN'))
ORDER BY tblSU.Site, tlkpSUDesc.ESR_SUcatdisp, tblSU.SUDescCode, CDbl(IIf(InStr([tblSU]![SUNum],'-'),Left([tblSU]![SUNum],Len([tblSU]![SUNum])-2),[tblSU]![SUNum]))

Laravel 9 Query Builder实现代码

直接使用DB门面构建查询,无需模型:

use Illuminate\Support\Facades\DB;

$site = request('Site');
$crit = request('Crit');

$query = DB::table('tblSU')
    // 关联tlkpSUDesc(RIGHT JOIN)
    ->rightJoin('tlkpSUDesc', 'tblSU.SUDescCode', '=', 'tlkpSUDesc.SUDescCode')
    // 关联tlkpSUTyp(RIGHT JOIN)
    ->rightJoin('tlkpSUTyp', 'tblSU.SUTypCode', '=', 'tlkpSUTyp.SUTypCode')
    // 指定查询字段
    ->select([
        'tblSU.Site',
        'tlkpSUDesc.ESR_SUcat',
        'tlkpSUDesc.ESR_SUcatdisp',
        'tlkpSUDesc.SUDesc',
        'tlkpSUTyp.SUTyp',
        'tblSU.SUNum'
    ])
    // 筛选条件(参数绑定避免注入)
    ->where('tblSU.Site', '=', $site)
    ->where('tlkpSUDesc.ESR_SUcat', '=', $crit)
    ->where('tblSU.SUTypCode', '!=', 'GEN')
    // 排序规则,原生表达式兼容Access函数
    ->orderBy('tblSU.Site')
    ->orderBy('tlkpSUDesc.ESR_SUcatdisp')
    ->orderBy('tblSU.SUDescCode')
    ->orderByRaw("CDbl(IIf(InStr(tblSU.SUNum,'-'),Left(tblSU.SUNum,Len(tblSU.SUNum)-2),tblSU.SUNum))");

// 执行查询获取结果集
$results = $query->get();

核心要点说明

  • JOIN逻辑对齐:按原SQL嵌套RIGHT JOIN的顺序,先关联tlkpSUDesc再关联tlkpSUTyp,确保数据关联逻辑一致。
  • 安全参数处理:直接绑定请求参数,替代原SQL的字符串拼接,彻底避免SQL注入风险。
  • 原生函数兼容:原Access特有的CDbl、IIf等函数通过orderByRaw直接写入原生SQL片段,保证排序逻辑和原语句完全一致。
  • 无模型依赖:全程基于DB门面操作,无需定义任何Eloquent模型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 06:40:26