Laravel如何在有条件的情况下进行雄辩的雄辩多次联接?

时间:2018-08-28 12:59:11

标签: php laravel eloquent

我正在尝试将旧的php代码转换为Laravel,并且遇到了带有许多联接和条件的复杂查询语句。我尝试转换查询语句(请参见第二张图片),但是得到的结果却不同。原始代码的总行返回13,340行,当我尝试执行laravel版本时,由于行数太多,我得到了PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 41553920 bytes),这可能意味着我的查询有问题。

原始PHP代码:enter image description here

口才版:enter image description here

2 个答案:

答案 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()来找出查询错误的地方