У меня есть три модели:
/**
* 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"
}
]