簡體   English   中英

我怎樣才能將此SQL轉換為雄辯的Laravel?

[英]How can i convert this SQL to Laravel eloquent?

我有以下SQL

SELECT C.CUOCODE, C.NAME, COUNT(*) TOTAL_PAYMENT, SUM(P.AMOUNT) TOTAL_AMOUNT
FROM TAX_PAYMENT P
INNER JOIN TAX_CHECKPOINT C ON C.CUOCODE = REGEXP_SUBSTR(P.INVOICEID, 'R....')
WHERE DELETED = 0 AND TO_CHAR(TXTIME,'YYYY-MM-DD') = '2018-04-24'
GROUP BY  C.CUOCODE, C.NAME
ORDER BY TOTAL_AMOUNT DESC;

我如何能雄辯地轉換為laravel,我有一個以“ paymentid”為主鍵的“付款”模型(表TAX_PAYMENT)。

DB::table('TAX_PAYMENT as P')
    ->select([
        'C.CUOCODE',
        'C.NAME',
        DB::raw('COUNT(*) AS TOTAL_PAYMENT'),
        DB::raw('SUM(P.AMOUNT) AS TOTAL_AMOUNT'),
    ])->Join('TAX_CHECKPOINT C', 'C.CUOCODE', '=', DB::raw('REGEXP_SUBSTR(P.INVOICEID,'R....')'))
    ->where('DELETED', 0)
    ->where(DB::raw("TO_CHAR(TXTIME,'YYYY-MM-DD')"), '2018-04-24')
    ->groupBy('C.CUOCODE')
    ->groupBy('C.NAME')
    ->orderBy('TOTAL_AMOUNT', 'desc')
    ->toSql();

產量

SELECT
    `C`.`CUOCODE`,
    `C`.`NAME`,
    COUNT(*) AS TOTAL_PAYMENT,
    SUM(P.AMOUNT) AS TOTAL_AMOUNT
FROM
    `TAX_PAYMENT` AS `P`
INNER JOIN `TAX_CHECKPOINT C` ON `C`.`CUOCODE` = REGEXP_SUBSTR (P.INVOICEID,"R....")
WHERE
    `DELETED` = ?
AND TO_CHAR (TXTIME, 'YYYY-MM-DD') = ?
GROUP BY
    `C`.`CUOCODE`,
    `C`.`NAME`
ORDER BY
    `TOTAL_AMOUNT` DESC

一種快速而骯臟的方法是使用Eloquents select raw,例如:

 $result = DB::select( DB::raw("SELECT C.CUOCODE, C.NAME, COUNT(*) 
TOTAL_PAYMENT, SUM(P.AMOUNT) TOTAL_AMOUNT FROM TAX_PAYMENT INNER JOIN 
TAX_CHECKPOINT C ON C.CUOCODE
= REGEXP_SUBSTR(P.INVOICEID, 'R....') WHERE DELETED = 0 AND 
TO_CHAR(TXTIME,'YYYY-MM-DD') = '2018-04-24' GROUP BY  C.CUOCODE,
C.NAME ORDER BY TOTAL_AMOUNT DESC"));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM