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

n9vozmp4  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(524)

我在mysql中的所有原始查询都需要转换为laravel 5.4查询生成器:

  1. SELECT MONTH(calendar.datefield) AS Bulan, calendar.datefield AS Tanggal, IFNULL(SUM(dbk.jumlah),0) AS Jumlah
  2. FROM detail_brg_keluar AS dbk
  3. INNER JOIN penjualan AS pen ON pen.id = dbk.id_brg_keluar
  4. RIGHT JOIN calendar ON (DATE(pen.tgl_keluar) = calendar.datefield)
  5. WHERE
  6. (calendar.datefield BETWEEN
  7. (SELECT MIN(DATE(tgl_keluar)) FROM penjualan AS p
  8. INNER JOIN detail_brg_keluar AS detail ON p.id = detail.id_brg_keluar
  9. WHERE detail.id_produk = 818002)
  10. AND
  11. (SELECT MAX(DATE(tgl_keluar)) FROM penjualan AS pe
  12. INNER JOIN detail_brg_keluar AS det ON pe.id = det.id_brg_keluar
  13. WHERE det.id_produk = 818002))
  14. AND (dbk.id_produk = 818002 OR dbk.id_produk IS NULL)
  15. GROUP BY MONTH(calendar.datefield)
  16. ORDER BY calendar.datefield ASC


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

  1. $proT = DB::table('detail_brg_keluar AS dbk')
  2. ->select( DB::raw('MONTH(calendar.datefield) AS Bulan, calendar.datefield AS Tanggal, IFNULL(SUM(dbk.jumlah),0) AS Jumlah '))
  3. ->join('penjualan AS pen', 'pen.id', '=', 'dbk.id_brg_keluar')
  4. ->join('calendar', DB::raw('DATE(pen.tgl_keluar)'), '=', 'calendar.datefield')
  5. ->whereBetween('calendar.datefield', [$from[0]->tanggalAwal, $to[0]->tanggalAkhir])
  6. ->where(DB::raw('dbk.id_produk = 818002 OR dbk.id_produk IS NULL'))
  7. ->groupBy(DB::raw('MONTH(calendar.datefield)'))
  8. ->orderBy(DB::raw('calendar.datefield', 'ASC'))
  9. ->get();

代码从和到:

  1. $from = DB::table('penjualan AS p')
  2. ->select(DB::raw('MIN(DATE(tgl_keluar)) AS tanggalAwal'))
  3. ->join('detail_brg_keluar AS detail', 'p.id', '=', 'detail.id_brg_keluar')
  4. ->where('detail.id_produk', $id)
  5. ->get();
  6. $to = DB::table('penjualan AS p')
  7. ->select(DB::raw('MAX(DATE(tgl_keluar)) AS tanggalAkhir'))
  8. ->join('detail_brg_keluar AS detail', 'p.id', '=', 'detail.id_brg_keluar')
  9. ->where('detail.id_produk', $id)
  10. ->get();

我不知道了?
全部thx

qltillow

qltillow1#

使用此选项:

  1. $from = DB::table('penjualan AS p')
  2. ->select(DB::raw('MIN(DATE(tgl_keluar)) AS tanggalAwal'))
  3. ->join('detail_brg_keluar AS detail', 'p.id', '=', 'detail.id_brg_keluar')
  4. ->where('detail.id_produk', $id);
  5. $to = DB::table('penjualan AS p')
  6. ->select(DB::raw('MAX(DATE(tgl_keluar)) AS tanggalAkhir'))
  7. ->join('detail_brg_keluar AS detail', 'p.id', '=', 'detail.id_brg_keluar')
  8. ->where('detail.id_produk', $id);
  9. $proT = DB::table('detail_brg_keluar AS dbk')
  10. ->select( DB::raw('MONTH(calendar.datefield) AS Bulan, calendar.datefield AS Tanggal, IFNULL(SUM(dbk.jumlah),0) AS Jumlah '))
  11. ->join('penjualan AS pen', 'pen.id', '=', 'dbk.id_brg_keluar')
  12. ->rightJoin('calendar', DB::raw('DATE(pen.tgl_keluar)'), '=', 'calendar.datefield')
  13. ->whereRaw('calendar.datefield BETWEEN ('.$from->toSql().') AND ('.$to->toSql().')', [$id, $id])
  14. ->where(function($query) {
  15. $query->where('dbk.id_produk', 818002)->orWhereNull('dbk.id_produk');
  16. })
  17. ->groupBy(DB::raw('MONTH(calendar.datefield)'))
  18. ->orderBy('calendar.datefield', 'ASC')
  19. ->get();

不执行 $from 以及 $to ,使用生成的sql。
我替换了 ->join('calendar'->rightJoin('calendar' .
我替换了 where(DB::raw()) 使用嵌套约束。 orderBy() 不需要原始的表达。

展开查看全部

相关问题