首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将查询mysql转换为laravel查询

如何将查询mysql转换为laravel查询
EN

Stack Overflow用户
提问于 2018-06-20 07:28:32
回答 1查看 233关注 0票数 1

Hai all我在mysql中有这个原始查询,我需要将其转换为laravel 5.4查询生成器:

代码语言:javascript
复制
SELECT MONTH(calendar.datefield) AS Bulan, calendar.datefield AS Tanggal, IFNULL(SUM(dbk.jumlah),0) AS Jumlah 
FROM detail_brg_keluar AS dbk 
INNER JOIN penjualan AS pen ON pen.id = dbk.id_brg_keluar 
RIGHT JOIN calendar ON (DATE(pen.tgl_keluar) = calendar.datefield)
WHERE 
(calendar.datefield BETWEEN 
 (SELECT MIN(DATE(tgl_keluar)) FROM penjualan AS p
    INNER JOIN detail_brg_keluar AS detail ON p.id = detail.id_brg_keluar 
    WHERE detail.id_produk = 818002) 
 AND 
 (SELECT MAX(DATE(tgl_keluar)) FROM penjualan AS pe
    INNER JOIN detail_brg_keluar AS det ON pe.id = det.id_brg_keluar
    WHERE det.id_produk = 818002))
AND (dbk.id_produk = 818002 OR dbk.id_produk IS NULL)
GROUP BY MONTH(calendar.datefield)
ORDER BY calendar.datefield ASC

这是我的laravel代码,代码错误-_-

代码语言:javascript
复制
$proT = DB::table('detail_brg_keluar AS dbk')
    ->select( DB::raw('MONTH(calendar.datefield) AS Bulan, calendar.datefield AS Tanggal, IFNULL(SUM(dbk.jumlah),0) AS Jumlah '))
    ->join('penjualan AS pen', 'pen.id', '=', 'dbk.id_brg_keluar')
    ->join('calendar', DB::raw('DATE(pen.tgl_keluar)'), '=', 'calendar.datefield')
    ->whereBetween('calendar.datefield', [$from[0]->tanggalAwal, $to[0]->tanggalAkhir])
    ->where(DB::raw('dbk.id_produk = 818002 OR dbk.id_produk IS NULL'))
    ->groupBy(DB::raw('MONTH(calendar.datefield)'))
    ->orderBy(DB::raw('calendar.datefield', 'ASC'))
    ->get();

代码发件人和收件人:

代码语言:javascript
复制
$from = DB::table('penjualan AS p')
    ->select(DB::raw('MIN(DATE(tgl_keluar)) AS tanggalAwal'))
    ->join('detail_brg_keluar AS detail', 'p.id', '=', 'detail.id_brg_keluar')
    ->where('detail.id_produk', $id)
    ->get();

$to = DB::table('penjualan AS p')
    ->select(DB::raw('MAX(DATE(tgl_keluar)) AS tanggalAkhir'))
    ->join('detail_brg_keluar AS detail', 'p.id', '=', 'detail.id_brg_keluar')
    ->where('detail.id_produk', $id)
    ->get();

我再也不知道了?

Thx全部

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-20 09:51:07

使用以下命令:

代码语言:javascript
复制
$from = DB::table('penjualan AS p')
    ->select(DB::raw('MIN(DATE(tgl_keluar)) AS tanggalAwal'))
    ->join('detail_brg_keluar AS detail', 'p.id', '=', 'detail.id_brg_keluar')
    ->where('detail.id_produk', $id);
$to = DB::table('penjualan AS p')
    ->select(DB::raw('MAX(DATE(tgl_keluar)) AS tanggalAkhir'))
    ->join('detail_brg_keluar AS detail', 'p.id', '=', 'detail.id_brg_keluar')
    ->where('detail.id_produk', $id);
$proT = DB::table('detail_brg_keluar AS dbk')
    ->select( DB::raw('MONTH(calendar.datefield) AS Bulan, calendar.datefield AS Tanggal, IFNULL(SUM(dbk.jumlah),0) AS Jumlah '))
    ->join('penjualan AS pen', 'pen.id', '=', 'dbk.id_brg_keluar')
    ->rightJoin('calendar', DB::raw('DATE(pen.tgl_keluar)'), '=', 'calendar.datefield')
    ->whereRaw('calendar.datefield BETWEEN ('.$from->toSql().') AND ('.$to->toSql().')', [$id, $id])
    ->where(function($query) {
        $query->where('dbk.id_produk', 818002)->orWhereNull('dbk.id_produk');
    })
    ->groupBy(DB::raw('MONTH(calendar.datefield)'))
    ->orderBy('calendar.datefield', 'ASC')
    ->get();

  • 不要执行$from$to,请使用生成的SQL。
  • 我用->rightJoin('calendar'.
  • I替换了->join('calendar'用嵌套的SQL替换了where(DB::raw())不需要原始表达式。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50938226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档