Как написать подзапрос mysql join из 5 таблиц в контроллере laravel - PullRequest
0 голосов
/ 23 мая 2019

У меня есть запрос MySQL, как показано ниже, и я хочу использовать его в контроллере laravel,

Я знаю, как использовать соединение в laravel, но я не знаю, как его написать, когда у нас есть другойподзапрос в операторе соединения:

SELECT barangs.id, barangs.kode_barang, barangs.nama_barang, 
IFNULL(a.QTY_IN,0) AS masuk, IFNULL(b.QTY_OUT,0) AS keluar, 
IFNULL(c.PO_RETUR_QTY,0) AS po_retur, IFNULL(d.CUS_RETUR_QTY,0) AS cus_retur, 
barangs.stok AS stok_akhir, barangs.harga_beli
FROM barangs 

LEFT JOIN (
SELECT barang_masuk_detail.id_barang, barang_masuk.tgl_masuk, SUM(barang_masuk_detail.qty_terima) AS QTY_IN
FROM barang_masuk
LEFT JOIN barang_masuk_detail ON barang_masuk.id = barang_masuk_detail.id_brg_masuk
/* WHERE barang_masuk.tgl_masuk BETWEEN "2015-08-01" AND "2015-08-31" */
GROUP BY barang_masuk_detail.id_barang ASC
)AS a ON a.id_barang = barangs.id

LEFT JOIN (
SELECT barang_keluar_detail.id_barang, barang_keluar.tgl_kirim, SUM(barang_keluar_detail.qty_dikirim) AS QTY_OUT
FROM barang_keluar
LEFT JOIN barang_keluar_detail ON barang_keluar.id = barang_keluar_detail.id_brg_keluar
/* WHERE barang_keluar.tgl_kirim BETWEEN "2015-08-01" AND "2015-08-31"*/
GROUP BY barang_keluar_detail.id_barang ASC
)AS b ON b.id_barang = barangs.id

/*join retur try */
LEFT JOIN (
SELECT retur_beli_detail.barang_id, retur_beli.tgl_retur, SUM(retur_beli_detail.retur_qty) AS PO_RETUR_QTY
FROM retur_beli
LEFT JOIN retur_beli_detail ON retur_beli.id = retur_beli_detail.retur_id
/* WHERE retur_beli.tgl_retur BETWEEN "2015-08-01" AND "2015-08-31"*/
GROUP BY retur_beli_detail.barang_id ASC
)AS c ON c.barang_id = barangs.id

/*join retur dari customer */
LEFT JOIN (
SELECT retur_kirim_detail.barang_id, retur_kirim.tgl_retur, SUM(retur_kirim_detail.retur_qty) AS CUS_RETUR_QTY
FROM retur_kirim
LEFT JOIN retur_kirim_detail ON retur_kirim.id = retur_kirim_detail.retur_id
/* WHERE retur_kirim.tgl_retur BETWEEN "2015-08-01" AND "2015-08-31"*/
GROUP BY retur_kirim_detail.barang_id ASC
)AS d ON d.barang_id = barangs.id

, если я запускаю в sqlyog, он работает как положено, но не уверен, как написать его в синтаксисе laravel,

enter image description here

о, если это возможно, чтобы отфильтровать его, используя whereBetween в базе laravel по запросу, отправляемому от пользователя, где мне нужно поместить синтаксис?

like whereBetween ([$ request-> startDate, $request-> endDate]);

1 Ответ

1 голос
/ 23 мая 2019

Для простого способа выполнения запроса с нижеприведенным синтаксисом: -

DB::select("select * from table JOIN ...");

Это обеспечит вам сбор отфильтрованных данных.

Отредактированный код

для использования whereBetween() Laravel, где для запроса необходимо написать MySQL-запрос, как показано ниже

$startDate = $request->startDate;
$endDate = $request->endDate;

DB::select("
    select * from table JOIN ... 
    where fieldName BETWEEN '$startDate' AND '$endDate'
");

Чтобы добавить больше условий, нам нужно написать простой запрос MySQL.

...