代码之家  ›  专栏  ›  技术社区  ›  user3233791

将插入链接到sails中的2个表中。js公司

  •  0
  • user3233791  · 技术社区  · 7 年前

    对于熟悉风帆的专家。js公司: 我有一个客户模型,为了保持简单,我们可以这样说

    /**
     * Customers.js
     */
    
    module.exports = {
    
        attributes: {
    
            firstName: { type: 'string' },
            lastName: { type: 'string' }
        }
    };
    

    重要事项: 还有一个CustomerHistory模型,如下所示。无论何时创建或更新客户,都应插入/创建相应的CustomerHistory记录。

         /**
         * CustomerHistory.js
         */
    
        module.exports = {
    
            attributes: {
    
                customer: { model: 'customer' },
                firstName: { type: 'string' },
                lastName: { type: 'string' },
                modifiedAt: { type: 'datetime'}
            }
        };
    

    帆内选项。js公司:

    1. 重写或创建新的Sails蓝图操作(我们称之为 CreateWithHistory和UpdateWithHistory)始终插入 成功保存到Customer后的CustomerHistory。如果这是 建议的解决方案,一个代码示例会有所帮助。

    2. 创建自定义控制器操作(我们称之为 CreateWithHistory和UpdateWithHistory)始终插入 成功保存到Customer后的CustomerHistory。如果这是 建议的解决方案,一个代码示例将有助于了解如何链接2模型。创建和建模。使用模型更新。创建操作。

    3. 创建自定义客户模型操作,以便在创建或更新时隐式保存到历史记录中。如何做到这一点?

    1 回复  |  直到 7 年前
        1
  •  1
  •   arbuthnott    7 年前

    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();
            });
        }
    };
    

    这可能不是 准确的 您想要的流(例如,可能您有时首先创建历史记录,有时不在更新时修改历史记录,等等),但我认为使用可用回调列表应该能够完成您想要的。