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