首页 > 解决方案 > 添加 knex.js .andWhere() 是条件为真

问题描述

我有这个 Knex 查询:

const customerProducts = db.sequelize.knex.select([
      'CustomerProduct.id AS _id',
      'CustomerProduct.last_delivered AS _lastDelivered',
      'CustomerProduct.margin AS _margin',
      'CustomerProduct.outlier AS _outlier',
      'CustomerProduct.growth AS _growth',
      'CustomerProduct.period AS _period',
      'CustomerProduct.price AS _price',
      'CustomerProduct.active AS _active',
      'CustomerProduct.customer_id AS _customerId',
      'CustomerProduct.product_id AS _productId',
      'CustomerProduct.modified AS _modified',
      'CustomerProduct.month_value AS _monthValue',
      'customer.id AS _customer_id',
      'customer.title AS _customer_title',
      'customer.code AS _customer_code',
    ])
      .from('customer_products AS CustomerProduct')
      .innerJoin(
        'customers AS customer',
        'CustomerProduct.customer_id',
        'customer.id',
      )
      .where(whereClause)
      .limit(limit)
      .offset(offset);

我想包含一个.andWhere()仅在满足此条件时才添加到查询中的选项:

if (overdue === 'true')

我该怎么做呢?

标签: javascriptnode.jsknex.js

解决方案


你可以这样做:

const query = db.sequelize.knex.select([
      'CustomerProduct.id AS _id',
      'CustomerProduct.last_delivered AS _lastDelivered',
      'CustomerProduct.margin AS _margin',
      'CustomerProduct.outlier AS _outlier',
      'CustomerProduct.growth AS _growth',
      'CustomerProduct.period AS _period',
      'CustomerProduct.price AS _price',
      'CustomerProduct.active AS _active',
      'CustomerProduct.customer_id AS _customerId',
      'CustomerProduct.product_id AS _productId',
      'CustomerProduct.modified AS _modified',
      'CustomerProduct.month_value AS _monthValue',
      'customer.id AS _customer_id',
      'customer.title AS _customer_title',
      'customer.code AS _customer_code',
    ])
      .from('customer_products AS CustomerProduct')
      .innerJoin(
        'customers AS customer',
        'CustomerProduct.customer_id',
        'customer.id',
      );
if (overdue === 'true') {
  query = query.where(whereClause)
}
const customerProducts = query.limit(limit).offset(offset);

推荐阅读