我正在尝试将旧的php代码转换为Laravel,并且遇到了带有许多联接和条件的复杂查询语句。我尝试转换查询语句(请参见第二张图片),但是得到的结果却不同。原始代码的总行返回13,340行,当我尝试执行laravel版本时,由于行数太多,我得到了PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 41553920 bytes)
,这可能意味着我的查询有问题。>
答案 0 :(得分:2)
t_client
上的JOIN需要嵌套的约束:
->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');
});
})
您也可以使用whereIn()
:
->join('t_client AS fc', function($join) {
$join->on('t_client.shop_id', '=', 'fc.client_id')
->whereIn('fc.client_div', '=', ['0', '3']);
})
答案 1 :(得分:0)
在Laravel雄辩中,您还可以定义关系,因此您可以将用户定义为具有等级,然后可以使用laravel查询构建器实际获得那些结果(无需自己使用JOINS) https://laravel.com/docs/5.6/eloquent-relationships
如果这不是您需要的,我建议按照@apokrvfos的建议进行操作,并使用-> toSql()来找出查询错误的地方