我有一个查询,每次都必须返回一些数据,但没有,因为我的子句andWhere
导致我从查询中返回一个空列表,当它不是真的时,
我的代码:
const user = await this.conn.getRepository(User).createQueryBuilder("user")
.where(`user.id = ${userID}`)
.letJoin('user.orders', 'orders')
.andWhere('orders.dateService BETWEEN ${start} AND ${end}')
.addSelect("user.firstName", "firstName")
.addSelect("user.lastName", "lastName")
.getRawMany((;
这个查询返回我empty []
,因为在我的子句.andWhere('orders.dateService BETWEEN ${start} AND ${end}')
中我找不到任何顺序。。。
有人能告诉我,即使上面的子句返回none
,如何返回我的firstName
和lastName
吗?
感谢的帮助
在您的查询中,条件orders.dateService BETWEEN ${start} AND ${end}
实际上负责您没有任何结果。因为如果用户ID没有订单,则此条件始终为false,因为orders.dateService
为NULL。
因此,您必须添加一个附加条件,允许orders.dateService
为NULL。
const user = await this.conn.getRepository(User).createQueryBuilder("user")
.where(`user.id = ${userID}`)
.leftJoin('user.orders', 'orders')
.andWhere(new Brackets(qb => {
qb.where('orders.dateService BETWEEN ${start} AND ${end}')
.orWhere('orders.dateService IS NULL')
}))
.addSelect("user.firstName", "firstName")
.addSelect("user.lastName", "lastName")
这将创建(或多或少(以下SQL查询
SELECT user.firstname as firstName, user.lastName as lastName
FROM user LEFT JOIN orders ON user.id = orders.user
WHERE user.id = ${USERID} AND
(orders.dateService BETWEEN ${start} AND ${end} OR orders.dateService IS NULL)