链式插入 sails.js 中的 2 个表
Chained insert into 2 tables in sails.js
对于熟悉 sails.js 的专家:
我有一个客户模型,为了简单起见,假设
/**
* Customers.js
*/
module.exports = {
attributes: {
firstName: { type: 'string' },
lastName: { type: 'string' }
}
};
重要提示:
还有一个 CustomerHistory 模型,如下所示。每当创建或更新 Customer 时,相应的 CustomerHistory 记录也应该是 inserted/created.
/**
* CustomerHistory.js
*/
module.exports = {
attributes: {
customer: { model: 'customer' },
firstName: { type: 'string' },
lastName: { type: 'string' },
modifiedAt: { type: 'datetime'}
}
};
Sails.js内的选项:
覆盖或创建新的 Sails 蓝图操作(我们称之为
CreateWithHistory 和 UpdateWithHistory) 总是插入到
CustomerHistory 成功保存到 Customer 中。如果这是
建议的解决方案,代码示例会有所帮助。
创建自定义控制器操作(我们称之为
CreateWithHistory 和 UpdateWithHistory) 总是插入到
CustomerHistory 成功保存到 Customer 中。如果这是
建议的解决方案,代码示例将有助于如何将 2 Model.create 和 Model.update 与 Model.create 操作链接起来。
创建自定义客户模型操作以在创建或更新时隐式保存到历史记录中。如何做到这一点?
Sails js 为您可以使用的模型提供了 lifecycle callbacks。它们允许您在创建、更新新模型时或在其他时间执行自定义代码。我认为您可以通过向 Customer
模型添加回调来完成您想要的。在 Customer.js
:
module.exports = {
attributes: {
firstName: { type: 'string' },
lastName: { type: 'string' }
},
// this will create a new CustomerHistory for each Customer created
afterCreate: function(customer, cb) {
CustomerHistory.create({
customer: customer.id,
firstName: customer.firstName,
lastName: customer.lastName,
modifiedAt: new Date()
}).exec(function(err, history) {
if (err) { return cb(err); }
cb();
});
},
// update some fields in CustomerHistory after Customer is updated
afterUpdate: function(customer, cb) {
CustomerHistory.update({customer: customer.id}, {
firstName: customer.firstName,
lastName: customer.lastName,
modifiedAt: new Date()
}).exec(function(err, history) {
if (err) { return cb(err); }
cb();
});
}
};
这可能不是您想要的确切流程(例如,也许您有时先创建历史记录,有时不在更新时修改历史记录等),但是我认为使用可用回调列表应该能够完成你想要的。
对于熟悉 sails.js 的专家: 我有一个客户模型,为了简单起见,假设
/**
* Customers.js
*/
module.exports = {
attributes: {
firstName: { type: 'string' },
lastName: { type: 'string' }
}
};
重要提示: 还有一个 CustomerHistory 模型,如下所示。每当创建或更新 Customer 时,相应的 CustomerHistory 记录也应该是 inserted/created.
/**
* CustomerHistory.js
*/
module.exports = {
attributes: {
customer: { model: 'customer' },
firstName: { type: 'string' },
lastName: { type: 'string' },
modifiedAt: { type: 'datetime'}
}
};
Sails.js内的选项:
覆盖或创建新的 Sails 蓝图操作(我们称之为 CreateWithHistory 和 UpdateWithHistory) 总是插入到 CustomerHistory 成功保存到 Customer 中。如果这是 建议的解决方案,代码示例会有所帮助。
创建自定义控制器操作(我们称之为 CreateWithHistory 和 UpdateWithHistory) 总是插入到 CustomerHistory 成功保存到 Customer 中。如果这是 建议的解决方案,代码示例将有助于如何将 2 Model.create 和 Model.update 与 Model.create 操作链接起来。
创建自定义客户模型操作以在创建或更新时隐式保存到历史记录中。如何做到这一点?
Sails js 为您可以使用的模型提供了 lifecycle callbacks。它们允许您在创建、更新新模型时或在其他时间执行自定义代码。我认为您可以通过向 Customer
模型添加回调来完成您想要的。在 Customer.js
:
module.exports = {
attributes: {
firstName: { type: 'string' },
lastName: { type: 'string' }
},
// this will create a new CustomerHistory for each Customer created
afterCreate: function(customer, cb) {
CustomerHistory.create({
customer: customer.id,
firstName: customer.firstName,
lastName: customer.lastName,
modifiedAt: new Date()
}).exec(function(err, history) {
if (err) { return cb(err); }
cb();
});
},
// update some fields in CustomerHistory after Customer is updated
afterUpdate: function(customer, cb) {
CustomerHistory.update({customer: customer.id}, {
firstName: customer.firstName,
lastName: customer.lastName,
modifiedAt: new Date()
}).exec(function(err, history) {
if (err) { return cb(err); }
cb();
});
}
};
这可能不是您想要的确切流程(例如,也许您有时先创建历史记录,有时不在更新时修改历史记录等),但是我认为使用可用回调列表应该能够完成你想要的。