обновление связанных моделей из родительской модели - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь создать связанную модель через родительскую модель, используя uRL родительской модели.

Родитель: Связанные приложения: Кандидаты. Ниже приведено отношение

приложения -> hasMany-> заявители (foreignkey: идентификатор приложения) заявители -> BelongsTo -> приложения (foreignkey: applicationid)

Я хочу сделать upsert на обеих моделях вместе, используя URL родительской модели PATCH /API / Applications

Ниже приведен файл applications.js

    module.exports = function(Application) 
    {
    Application.afterRemote('upsert', function(ctx, instance, next){
      var response ={};
      response.id = ctx.result.id;

    var applicants = ctx.req.body.applicants || undefined;
    Application.getApp(function (err, app) { 
        var resp = { "applicants" :[]};
        if (applicants){
        for (var i=0; i<applicants.length ; i++)
        {
            applicants[i].application_id = ctx.result.id;
            app.models.Applicants.upsert(applicants[i], function (err, result) 
            {
                if (err) throw err;
                if (!result) {
                    var err = new Error("Insert into Applicant failed");
                    err.statusCode = 500;
                    next(err);
                }
                 // This prints the result in the console.
                console.log('***** In APP' + JSON.stringify(result));
                resp.applicants.push(result);
            });
            console.log(JSON.stringify(applicants));
        }
        // This still results in a empty array
        response.applicants = resp.applicants;
        ctx.result = response;
    }
    });
    next();
});

. Как можно получить результат upsert для модели заявителей, а затем отправить его обратно в ответ приложения для API.

Спасибо

1 Ответ

0 голосов
/ 04 октября 2018

Я бы так и сделал.Конечно, есть способ получше, но это может быть хорошим началом.

'use strict';

var app = require('../../server/server');
var models = app.models;
var Applicants;
app.on('started', function () {
    Applicants = models.Applicants;
});

module.exports = function (Application)
{
    Application.afterRemote('upsert', function (ctx, instance, next) {
        var response = {};
        response.id = ctx.result.id;
        var applicants = ctx.req.body.applicants || undefined;

        if (applicants) {
            var resp = {"applicants": []};
            var count = 0;
            for (var i = 0, applicantsLength = applicants.length; i < applicantsLength; i++) {
                applicants[i].application_id = ctx.result.id;
                Applicants.upsert(applicants[i], function (err, result) {
                    if (err)
                        return next(err);
                    if (!result) {
                        var err = new Error("Insert into Applicant failed");
                        err.statusCode = 500;
                        return next(err);
                    }
                    resp.applicants.push(result);
                    count++;
                    if (count === applicantsLength) {
                        response.applicants = resp.applicants;
                        ctx.result = response;
                        next();
                    }
                });
            }
        } else {
            next();
        }
    });
};

Если это не работает, вам следует поискать ' перед сохранением ' крючок.

...