Как да конвертирате заявка mysql в заявка laravel

Здравейте, имам тази необработена заявка в mysql, която трябва да преведа в laravel 5.4 query builder:

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 и грешка в кода -_-

$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();

Код от и до:

$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();

Нямам идея вече?

Благодаря на всички


person Deza Farras Tsany    schedule 19.06.2018    source източник


Отговори (1)


Използвай това:

$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.
  • Замених ->join('calendar' с ->rightJoin('calendar'.
  • Замених where(DB::raw()) с вложено ограничение.
  • orderBy() не се нуждае от необработен израз.
person Jonas Staudenmeir    schedule 20.06.2018
comment
съжалявам, тази грешка в кода: SQLSTATE[42000]: Синтактична грешка или нарушение на достъпа: 1055 'dbolshop.calendar.datefield' не е в GROUP BY (SQL: изберете - person Deza Farras Tsany; 20.06.2018
comment
Предполагам, че сте тествали само необработената заявка в phpMyAdmin? Но не и в Laravel (DB::select($sql);)? - person Jonas Staudenmeir; 20.06.2018
comment
благодаря за решението, заявката работи с малка модификация - person Deza Farras Tsany; 20.06.2018
comment
да, просто тествам заявка в phpMyAdmin !! защото не знам тестова заявка в laravel - person Deza Farras Tsany; 20.06.2018