Saya menggunakan node js + sekuel. Saya ingin memfilter hasil produk berdasarkan opsi yang dipilih seperti vendor, harga, opsi pengiriman, dan lain-lain, tetapi saya tidak dapat memahami cara membuat kueri dengan tepat.

Sekarang saya melakukan ini, tetapi metode ini hanya berfungsi ketika semua filter dipilih (DAN operator). Apa yang harus saya lakukan jika pengguna hanya memilih 1 filter, atau beberapa di antaranya?

    let vendor = req.query.vendor;
    let priceFrom = req.query.priceFrom;
    let priceTo = req.query.priceTo;
    let delivery = req.query.delivery

            Product.findAll({
                where: {
                    vendor_id: {
                        in: vendor
                    },
                    price: {
                        $between: [priceFrom, priceTo]
                    },
                    {
                    delivery: delivery 
                    }
                }
            }).then(products => {
                res.render('product', {products: products});
                console.log(products)
            });

Saya melihat satu-satunya cara sekarang untuk membuat ini menulis banyak pernyataan if-else untuk setiap kesempatan.

0
STK90 11 Oktober 2017, 00:27

2 jawaban

Jawaban Terbaik

Pertama, periksa parameter kueri dan buat objek berdasarkan parameter kueri tersebut, misalnya:

let vendor = req.query.vendor;
let priceFrom = req.query.priceFrom;
let priceTo = req.query.priceTo;
let delivery = req.query.delivery
let options = { where: {} };
if (vendor)
    options.where.vendor_id = {$in: vendor}
if (priceFrom && priceTo)
    options.where.price = {$between: [priceFrom, priceTo]}
if (delivery)
    options.where.delivery = delivery
Product.findAll(options)
  .then(products => {
      console.log(products)
      res.render('product', { products: products });
  });
6
Tyler2P 15 Agustus 2021, 04:21
1
Dengan versi terbaru, ini tidak akan berfungsi. gunakan [Op.between] dan [Op.in] sequelize.org/ master/manual/…
 – 
Isuru Dilshan
21 Agustus 2020, 20:51

Anda juga dapat menggunakan paket seperti odata-sequelize. Ini menyederhanakan proses filter.

var parseOData = require("odata-sequelize");
var sequelize = require("sequelize");
var query = parseOData(
  "$top=5&$skip=1&$select=Foo,Bar&$filter=Foo eq 'Test' or Bar eq 'Test'&$orderby=Foo desc",
  sequelize
);

Ini akan menghasilkan

{
    attributes: ['Foo', 'Bar'],
    limit: 5,
    offset: 1,
    order: [
        ['Foo', 'DESC']
    ],
    where: {
        [Op.or]: [
            {
                Foo: {
                    [Op.eq]: "Test"
                }
            },
            {
                Bar: {
                    [Op.eq]: "Test"
                }
            }
        ]
    }
}
0
Micaiah Effiong 19 Agustus 2021, 00:03
Meskipun tautan ini dapat menjawab pertanyaan, lebih baik untuk memasukkan bagian penting dari jawaban di sini dan memberikan tautan untuk referensi. Jawaban hanya tautan dapat menjadi tidak valid jika halaman tertaut berubah.
 – 
Tyler2P
14 Agustus 2021, 22:13
Terima kasih, saya sekarang telah menambahkan jadi contoh kode
 – 
Micaiah Effiong
19 Agustus 2021, 00:04