Как правильно выполнить несколько объединений Laravel Eloquent с условиями? - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь преобразовать старый php-код в Laravel, и я наткнулся на сложный запрос с множеством соединений и условий. Я попытался преобразовать оператор запроса (см. 2-е изображение), но результаты, которые я получаю, отличаются. Всего строк для исходного кода возвращает 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 голосов
/ 29 августа 2018

JOIN на t_client требует вложенного ограничения:

->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']);
})
0 голосов
/ 28 августа 2018

В Laravel eloquent вы также можете определить отношения, чтобы вы могли определить пользователя как имеющего ранг, и после того, как вы сможете использовать конструктор запросов laravel, чтобы фактически получить эти результаты (без использования JOINS самостоятельно) https://laravel.com/docs/5.6/eloquent-relationships

Если это не то, что вам нужно, я бы предложил сделать то, что предложил @apokrvfos, и использовать -> toSql (), чтобы выяснить, где ваш запрос идет не так

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...