Laravel 中需要 innerJoin 的数据来自查询结果,怎么做?

类似要做如下操作
table('info as a')->join(
(select loan_id from loan_table where uid in (select uid from users where created_at > xxx)) as b,
'a.loan_id',
'=',
'b.loan_id'
)

SQL 大概意思是:

select * from loan_info as a inner join (select loan_id from loan_table where uid in (select uid from users where created_at > xxx)) as b on a.loan_id = b.loan_id

用laravel中查询构造器怎么实现?

hookover
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 3
hookover

搞定了

        $join = $this->getLoanIDByLoanNumberParam($params);
        $query->join($this->dbObj->raw("(" . $join->toSql() . ") as ul"), 'ul.loan_id', '=', 'ulp.loan_id');
        $query->mergeBindings($join);

但有个新问题
mergeBindings合并后的bindings数据顺序不对...

5年前 评论

没必要用子查询,也应该避免用子查询,很慢的。

SELECT li.* FROM `loan_info` AS li 
INNER JOIN `loan_table` AS lt ON li.loan_id = lt.loan_id 
INNER JOIN `users` AS u ON u.uid=lt.uid 
WHERE u.created_at > xxx
5年前 评论
hookover

@Littlesqx 我后面调整了merge顺序,解决了。子查询确实会慢,但是我想了一下数据量,可能不用子查询要拿到PHP中处理的数据量可能会十分庞大,所以还是子查询吧,做后台业务系统数据统计啥的,所以性能不是十分在意,想要快的话,得生成中间表来存

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!