Javascript 在Objective.js中,如何在查询中包含虚拟列?
我想创建一个Javascript 在Objective.js中,如何在查询中包含虚拟列?,javascript,knex.js,objection.js,Javascript,Knex.js,Objection.js,我想创建一个expired\u bool虚拟列 我有以下三个表格: 订阅: 身份证件 期间 价格 1. 30 0.99 2. 360 1.99 一种可能的解决方案是将到期日列添加到发票项目 订阅激活期间将同时设置激活日期和到期日期 activation_date = today's date expiry_date = activation_date + subscription duration 发票项目: 身份证件 用户id 发票号 订阅id 激活日期 有效期 1. 34 1. 1. 20
expired\u bool
虚拟列
我有以下三个表格:
订阅:
身份证件
期间
价格
1.
30
0.99
2.
360
1.99
一种可能的解决方案是将
到期日
列添加到发票项目
订阅激活期间将同时设置激活日期
和到期日期
activation_date = today's date
expiry_date = activation_date + subscription duration
发票项目:
身份证件
用户id
发票号
订阅id
激活日期
有效期
1.
34
1.
1.
2020-05-15 12:51:51
2020-06-14 12:51:51
2.
34
1.
2.
2021-02-20 20:20:12
2022-02-15 20:20:12
3.
42
2.
1.
无效的
无效的
4.
42
2.
2.
2021-02-20 20:20:12
2022-02-15 20:20:12
显然,您不能使用虚拟字段来执行异步操作。也不能基于虚拟字段进行查询。它们完全是用javascript定义的 因此,可以按如下方式执行(使用从Objective.js导入的
raw
):
从“异议”导入异议;
const{Model,raw}=objective;
...
类InvoiceItem扩展了模型{
...
静态修改器={
过期信息(qb){
选择(
“发票项目”。”,
原始('activation\u date+make\u interval(days=>subscription.duration'))。as('expiration\u date'),
原始('activation_date+make_interval(days=>subscription.duration)
这使用了Postgres函数,但是对于其他数据库的想法是一样的,尽管raw
中的代码可能需要稍微调整
import objection from "objection";
const { Model, raw } = objection;
...
class InvoiceItem extends Model {
...
static modifiers = {
expiryInfo(qb) {
qb.select(
'invoice_items.*',
raw('activation_date + make_interval(days => subscription.duration)').as('expiration_date'),
raw('activation_date + make_interval(days => subscription.duration) < now()').as('expired_bool'),
).joinRelated('subscription')
}
}
...
}
const query = await User.query()
.findById(userId)
.withGraphFetched("invoiceItems(expiryInfo).subscription")
.withGraphFetched("invoices")