Php 如何正确地利用条件进行Laravel雄辩的多重连接?

Php 如何正确地利用条件进行Laravel雄辩的多重连接?,php,laravel,eloquent,Php,Laravel,Eloquent,我正在尝试将一个旧的php代码转换为Laravel,我遇到了一个复杂的查询语句,其中包含许多连接和条件。我尝试转换查询语句(参见第二幅图),但得到的结果不同。原始代码的总行数返回13340行,当我尝试执行laravel版本时,我得到一个PHP致命错误:允许的内存大小为134217728字节(尝试分配41553920字节),因为行数太多,这可能意味着我所做的查询有问题 原始PHP代码: Eloquent版本:在Laravel Eloquent中,您还可以定义关系,这样您就可以将用户定义为具有排名,

我正在尝试将一个旧的php代码转换为Laravel,我遇到了一个复杂的查询语句,其中包含许多连接和条件。我尝试转换查询语句(参见第二幅图),但得到的结果不同。原始代码的总行数返回13340行,当我尝试执行laravel版本时,我得到一个
PHP致命错误:允许的内存大小为134217728字节(尝试分配41553920字节)
,因为行数太多,这可能意味着我所做的查询有问题

原始PHP代码:


Eloquent版本:

在Laravel Eloquent中,您还可以定义关系,这样您就可以将用户定义为具有排名,然后您就可以使用Laravel查询生成器实际获取这些结果(无需自己使用连接)


如果这不是您所需要的,我建议您按照@apokrvfos的建议进行操作,并使用->toSql()找出您的查询哪里出了问题

->join('t_client AS fc', function($join) {
    $join->on('t_client.shop_id', '=', 'fc.client_id')
        ->where(function($where) {
            $where->where('fc.client_div', '=', '0')
                ->orWhere('fc.client_div', '=', '3');
        });
})
您还可以使用
其中()


如果在查询生成器查询结束时执行
->toSql()
,则可以看到实际生成的SQL查询,以便检查差异所在。我猜是回调上的
中的
where
。为什么要使用大量的连接而不是使用模型和定义关系?
->join('t_client AS fc', function($join) {
    $join->on('t_client.shop_id', '=', 'fc.client_id')
        ->whereIn('fc.client_div', '=', ['0', '3']);
})