Eu tenho um modelo de usuário e um modelo de curso, e eles têm um relacionamento muitos para muitos, portanto, basicamente, os usuários podem ingressar em vários cursos e os cursos têm muitos usuários (alunos). Eu tenho uma tabela de associação e estou tentando adicionar informações adicionais à tabela de associação. Basicamente, os usuários têm uma cota mensal de perguntas que podem fazer por curso. Portanto, adicionei uma coluna de cota à tabela de junção User_Course. Estou tendo problemas para acessar a coluna de cota. Abaixo está o código relevante para se ter uma ideia.
var User = DB.Model.extend({
Courses: function() {
return this.belongsToMany('Course', 'User_Course', 'userId', 'courseId');
},
});
var Course = DB.Model.extend({
Users: function() {
return this.belongsToMany('User', 'User_Course', 'courseId', 'userId');
}
})
E User_Course é minha tabela de junção que tem a coluna de cota adicional:
**User_Course:**
userId: int
courseId: int
quota: int
Eu quero ser capaz de diminuir meu valor de cota. Consigo atualizá-lo usando updatePivot, mas não consigo simplesmente obter o valor que está na cota. Aqui está o código que estou usando para atualizar o valor:
var userPromise = new User.User({userId: userId}).fetch({withRelated: ['Courses']});
userPromise.then(function(_user) {
_user.related('enrolledCourses').updatePivot({courseId:courseId, quota:1}).then(function() {
return;
})
})
Como você pode ver, estou atualizando o valor da cota para 1 toda vez aqui. Gostaria de determinar programaticamente qual é o valor da cota atual e diminuí-lo.
Experimente withPivot
. Por exemplo, return this.belongsToMany(Comment).withPivot(['created_at', 'order']);
você pode colocar aqui sua cota e a receberá ao carregar a relação.
Atualizar:
OK, aqui está um exemplo:
new Town().where({
town_number: 2301
}).fetchAll({
columns: ['town_title', 'id'],
withRelated: [{
'address': function(qb) {
qb.select('addresses.town_id', 'addresses.participant_id');
qb.columns('addresses.street_name');
// here you could simply do qb.where({something_id: 1}); as well
}
}]
}).then(function(result) {
res.json(result);
});
Então, basicamente, em vez de apenas dizer withRelated: ['table_name']
, você define o nome da tabela como um objeto, com a propriedade table_name
e function
como um valor, que tem um construtor de consulta ( qb
) e você pode consultar essa tabela separadamente.
Espero que isto ajude!
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras