【问题标题】:Loopback before save update all instance保存更新所有实例之前的环回
【发布时间】:2018-03-14 21:45:59
【问题描述】:

关于保存在 UpdateAll 之前的所有快速问题

假设我有一个客户模型,它有很多订单。在保存客户之前的操作挂钩监控中,我试图自动创建订单。诀窍是我在做客户 UpdateAll 时尝试这样做

根据我看到的文档,无法获取客户当前实例的 id

但是有没有办法做类似ctx.instance.orders.create(data); 的事情?

【问题讨论】:

    标签: hook instance loopbackjs strongloop


    【解决方案1】:

    我相信在这种情况下,使用persist 钩子会更有意义。您可以通过ctx.currentInstance.id 访问该ID。此挂钩由将数据持久保存到数据源的操作(包括更新)触发。

    MyModel.observe('persist', function(ctx, next) {
      if (ctx && ctx.currentInstance.id) {
        // create order here
      } 
      next();
    });

    【讨论】:

    • 不幸的是,似乎对 updateAll 不起作用...只有 ctx 中显示的数据是 wheredata.. :/
    【解决方案2】:

    updateAllupdate的别名函数。

    你可以试试,

    Customer.observe('before save', (ctx, next) => {
        if (ctx.instance && ctx.instance.id ) {
          // create order here
        }
        next();
      });
    

    ctx.instance.id只有在你通过时才可用。

    Customer.update({id: 1}, {name: 'New Name'}) - 在这种情况下,ctx.instance.id 将可用。

    Customer.update({name: 'New Name'}) - 在这种情况下,ctx.instance.id 将不可用。这也将更新所有客户的姓名。

    【讨论】:

    • 不幸的是,我试图拦截的请求是Customer.updateAll({id: {inq: [1,2,3...]}});,并且在保存之前没有实例:/
    • 是的。因为 update 不会从 db 获取任何内容。它使用数据库更新操作。一种可能的解决方法是覆盖 Customer Model 的 updateAll 函数。
    • 如果它使用数据库更新操作,但如何触发操作挂钩?例如,当我执行 id:({id: {inq: [1,2,3]}}); 时,我确实在保存触发器 3 次之前/之后看到了操作挂钩...无法访问当前受影响的实例?
    猜你喜欢
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 2015-09-27
    相关资源
    最近更新 更多