Как редактировать и добавлять больше, чем значение в поле из отношения Ассоциации в паруса js? - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть три модели:

/**
 * Car.js
 */

module.exports = {

  attributes: {
    color: {
      type:'string',
      required: true,
    },
    year: {
      type: 'string',
      required: true
    },
    owners: {
      collection: 'owner',
      via: 'car',
      through: 'carowner'
    }
  },

};

и

/**
 * Owner.js
 */

module.exports = {

  attributes: {
    name: {
      type:'string',
      required: true,
    },
    mobile: {
      type: 'string',
      required: true
    },
    cars: {
      collection: 'car',
      via: 'owner',
      through: 'carowner'
    }
  },

};

и третья, carowner:

module.exports = {

  attributes: {

    car:{
      columnName: 'carId',
      model: 'Car',
      required: true
    },
    owner:{
      columnName: 'ownerId',
      model: 'Owner',
      required: true
    }
  },
};

Теперь у меня есть контроллеры для Car и Carowner где я могу делать операции CRUD. Я добавляю автомобиль владельцу, используя carId, созданный mon go, и отображаю его с помощью .populate ().

Моя первая проблема заключается в том, что с помощью этой функции я не знаю, как добавить несколько идентификаторов автомобилей одному владельцу. Это, очевидно, отношение многих ко многим:

async postNewOwner(req, res) {
    try {
        const { name, mobile, carId } = req.allParams();
        if (!name) {
            return res.badRequest({ err: 'name is required field' });
        }
        if (!mobile) {
            return res.badRequest({ err: 'mobile is required field' });
        }
        const owner= await Owner.create({
            name: name,
            mobile: mobile,
        })
            .fetch();
        const carOwner= await Carowner.create({
            owner: owner.id,
            car: carId
        }).fetch();
        return res.ok(carOwner);
    }
    catch (err) {
        return res.serverError(err);
    }
},

Моя вторая проблема заключается в том, что с помощью этой функции в CarownerController я могу обновить все поля, кроме Car:

async editOwner(req, res) {
        try {
            let params = req.allParams();
            let newParams = {};
            if (params.name) {
                newParams.name = params.name;
            }
            if (params.mobile) {
                newParams.mobile = params.mobile;
            }
            if (params.carId) {
                newParams.cars = params.carId;
            }
            const results = await Owner.update(
                { id: req.params.id }, newParams
            );
            return res.ok(results);

        } catch (err) {
            return res.serverError(err);
        }
    },

Вот как отображаются результаты carowner при получении:

    [
  {
    "createdAt": 1587463558320,
    "updatedAt": 1587463558320,
    "id": "5e9ec586ce259d61748c1fa2",
    "car": {
      "createdAt": 1587462965794,
      "updatedAt": 1587462965794,
      "id": "5e9ec3356ab8c2156c8eac91",
      "color": "red",
      "year": "2017"
    },
    "owner": {
      "createdAt": 1587463558162,
      "updatedAt": 1587463558162,
      "id": "5e9ec586ce259d61748c1fa1",
      "name": "John",
      "mobile": "0111111111223232"
    }
  }
]

, а вот для автомобиля:

[
  {
    "owners": [
      {
        "createdAt": 1587463558162,
        "updatedAt": 1587463558162,
        "id": "5e9ec586ce259d61748c1fa1",
        "name": "John",
        "mobile": "0111111111223232"
      },
      {
        "createdAt": 1587463574263,
        "updatedAt": 1587463574263,
        "id": "5e9ec596ce259d61748c1fa3",
        "name": "Jessica",
        "mobile": "0111111111223232"
      }
    ],
    "createdAt": 1587462965794,
    "updatedAt": 1587462965794,
    "id": "5e9ec3356ab8c2156c8eac91",
    "color": "Red",
    "year": "2017"
  }
]
...