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

如何使用Laravel ORM在指定多级会计科目区间查询交易明细?

实现会计科目组合区间查询

针对需求,需基于cta、scta、sscta三个字段的组合值进行区间筛选,目标是找出**(cta, scta, sscta) >= (102, 1, 2)** 且 (cta, scta, sscta) <= (105, 2, 0) 的记录,以下是两种可行实现方式:

方案一:原生SQL条件(Laravel whereRaw)

利用主流数据库对多列组合比较的支持(如MySQL 5.7+、PostgreSQL),直接通过原生SQL逻辑实现,代码简洁高效:

$transaction_details = TransactionDetails::whereRaw("(cta, scta, sscta) >= (102, 1, 2)")
    ->whereRaw("(cta, scta, sscta) <= (105, 2, 0)")
    ->get();

方案二:Laravel查询构造器链式拼接

若需避免原生SQL,可拆解组合条件为多个逻辑分支,完全通过框架语法实现:

$transaction_details = TransactionDetails::where(function ($query) {
        // 1. cta在103-104之间的所有记录
        $query->whereBetween('cta', [103, 104])
        // 2. cta=102时,筛选scta>1 或 scta=1且sscta>=2的记录
        ->orWhere(function ($sub) {
            $sub->where('cta', 102)
                ->where(function ($sub2) {
                    $sub2->where('scta', '>', 1)
                        ->orWhere(function ($sub3) {
                            $sub3->where('scta', 1)
                                ->where('sscta', '>=', 2);
                        });
                });
        })
        // 3. cta=105时,筛选scta<2 或 scta=2且sscta<=0的记录
        ->orWhere(function ($sub) {
            $sub->where('cta', 105)
                ->where(function ($sub2) {
                    $sub2->where('scta', '<', 2)
                        ->orWhere(function ($sub3) {
                            $sub3->where('scta', 2)
                                ->where('sscta', '<=', 0);
                        });
                });
        });
    })
    ->get();

验证结果

执行任一代码后,将得到期望的查询结果:

cta    scta   sscta charge  
102    1      2     20.00   
102    1      2      2.00   
105    1      0     30.00   
105    2      0     50.00   

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 03:44:50