You need to enable JavaScript to run this app. Laravel如何基于父级关联关系查询获取符合条件的Transaction集合
优惠活动
大模型
产品
解决方案
定价
更多

Laravel如何基于父级关联关系查询获取符合条件的Transaction集合

你之前的写法无法得到正确结果,原因是直接写where('currency.currency_type', 0)时,Eloquent默认不会自动关联currencies表,查询只会在transactions单表执行,找不到对应的currency.currency_type字段。
以下是两种符合需求的正确写法:

写法一:ORM关联查询(推荐)

使用whereHas方法筛选满足关联表条件的记录,符合Eloquent的使用习惯,可读性更高:

$transactions = Transaction::where('user_id', 1)
    ->whereHas('currency', function ($query) {
        // 这里写关联表Currency的筛选条件
        $query->where('currency_type', 0);
    })
    // 如果需要同时返回关联的货币数据可以加下面这行,不需要可以删除,避免N+1查询
    ->with('currency')
    ->get();

写法二:原生JOIN写法

和你给出的原生SQL逻辑完全一致,适合需要精细控制查询逻辑的场景:

$transactions = Transaction::select('transactions.*')
    ->join('currencies', 'transactions.currency_id', '=', 'currencies.id')
    ->where('transactions.user_id', 1)
    ->where('currencies.currency_type', 0)
    ->get();

两种写法都可以实现你需要的查询效果,可根据实际场景选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 08:15:01