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
相关产品推荐
相关产品推荐

