Laravel Необработанный запрос построителя запросов с двумя операторами FROM - PullRequest
0 голосов
/ 20 июня 2020

извиняюсь, если этот вопрос звучит немного скучно для кого-то, кого я действительно обращаю сюда, потому что я уже пытался решить свою проблему разными способами, и мне не удалось получить хорошие результаты.

Я пытаюсь чтобы преобразовать запрос MySQL в Laravel Query Builder, я покажу вам запрос:

SELECT DAY(AAA.fecha_hora_entrada) as DAY, IFNULL(BBB.SALES, 0) SALES, IFNULL(BBB.NET, 0) NET
FROM (
         SELECT fecha_hora_entrada
         FROM (
                  SELECT MAKEDATE(YEAR(NOW()), 1) +
                         INTERVAL (MONTH(NOW()) - 1) MONTH +
                         INTERVAL daynum DAY fecha_hora_entrada
                  FROM (
                           SELECT t * 10 + u daynum
                           FROM (SELECT 0 t UNION SELECT 1 UNION SELECT 2 UNION SELECT 3) A,
                                (SELECT 0 u UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) B
                           ORDER BY daynum
                       ) AS AA
              ) AS AA
         WHERE MONTH(fecha_hora_entrada) = MONTH(NOW())
     ) AS AAA
         LEFT JOIN (SELECT (DATE(fecha_hora_entrada)) AS fecha_hora_entrada, (SUM(neto)) AS NET, (COUNT(neto)) AS SALES
                    FROM t_derivados
                    GROUP BY DATE(fecha_hora_entrada)) BBB
                   ON AAA.fecha_hora_entrada = BBB.fecha_hora_entrada;

То, что я пробовал до сих пор, заключается в следующем. Пока мне удалось передать часть запроса MySQL на Query Builder

public function salesYear()
    {
        return DB::table(DB::table(DB::table(DB::table(DB::table(null, null)
            ->selectRaw('0 t UNION SELECT 2 UNION SELECT 3'),'A')
            ->orderBy('daynum')
            ->selectRaw('t * 10 + u daynum'), 'AA')
            ->selectRaw('MAKEDATE(YEAR(NOW()), 1) + INTERVAL (MONTH(NOW()) - 1) MONTH + INTERVAL daynum DAY fecha_hora_entrada'), 'AA')
            ->addSelect('fecha_hora_entrada')
            ->whereRaw('MONTH(fecha_hora_entrada) = MONTH(NOW())'), 'AAA')
            ->selectSub('DAY(AAA.fecha_hora_entrada)', 'DAY')
            ->selectSub('IFNULL(BBB.SALES, 0)', 'SALES')
            ->selectSub('IFNULL(BBB.NET, 0)', 'NET')
            ->leftJoinSub(DB::table('t_derivados')
                ->selectSub('DATE(fecha_hora_entrada)', 'fecha_hora_entrada')
                ->selectSub('SUM(neto)', 'NET')
                ->selectSub('COUNT(neto)', 'SALES')
                ->groupBy(DB::raw('DATE(fecha_hora_entrada)')), 'BBB', 'AAA.fecha_hora_entrada', 'BBB.fecha_hora_entrada')
            ->toSql();
    }

Я знаю, что это немного скучно читать все ... но давайте сосредоточимся на следующем вложенном предложении:

SELECT t * 10 + u daynum
FROM (SELECT 0 t UNION SELECT 1 UNION SELECT 2 UNION SELECT 3) A,
     (SELECT 0 u UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) B
ORDER BY daynum
...

По правде говоря, я не нашел способа добавить вторую FROM к Query Builder

SELECT 0 u UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) B
...

Кто-нибудь из знатоков темы может мне помочь. Заранее большое спасибо

...