2017-09-07 4 views
0

Hey toute question au sujet avant d'enregistrer sur UpdateAllBouclage avant d'enregistrer mettre à jour toutes les instances

Hypothétiquement J'ai un modèle de client, que les commandes hasMany. Dans une opération de contrôle de crochet avant la sauvegarde du Client j'essaye de créer une commande automatiquement. L'astuce est que je suis en train de le faire quand updateALL faire clients

Sur la base des documents que je vois qu'il n'y a pas moyen d'obtenir l'identifiant de l'instance actuelle du client

Mais est-il un moyen de faire quelque chose comme ctx.instance.orders.create(data);?

Répondre

0

updateAll est une fonction d'alias de update.

Vous pouvez essayer quelque chose comme,

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

ctx.instance.id est disponnible que lorsque vous passez.

i.e.

Customer.update({id: 1}, {name: 'New Name'}) -dans ce cas ctx.instance.id sera disponible.

Customer.update({name: 'New Name'}) - dans ce cas, ctx.instance.id ne sera pas disponible. Aussi, cela mettra à jour le nom de tous les clients.

+0

Malheureusement, la requête que j'essaie d'intercepter est 'Customer.updateAll ({id: {inq: [1,2,3 ...]}})' et il n'y a pas d'instance avant enregistrement:/ – glesage

+0

Oui. Parce que la mise à jour ne récupère rien de DB. Il utilise l'opération de mise à jour de base de données Une solution de contournement possible consiste à remplacer la fonction updateAll pour le modèle client. –

+0

S'il utilise l'opération de mise à jour de la base de données, comment les hooks d'opération sont-ils déclenchés? par exemple quand je fais id: '({id: {inq: [1,2,3]}};' alors je vois l'opération hooks avant/après save trigger 3 fois ... pas moyen d'accéder à l'instant instance affectée? – glesage