Как структурировать объединяющую таблицу с помощью ObjectionJS?
Я пытаюсь создать модель данных, которая выглядит следующим образом:
По сути, пользователь может принадлежать ко многим проектам, а проект может иметь много пользователей. Я подумал, что я бы сделал таблицу соединений под названием UserProjects
,
Тем не менее, я не совсем уверен, как выглядит структура. Моя пользовательская модель в Objection выглядит так:
class User extends Model {
static get tableName () {
return 'user'
}
static get relationMappings () {
return {
timesheet: {
relation: Model.HasManyRelation,
modelClass: Timesheet,
join: {
from: 'user.id',
to: 'timesheet.user_id'
}
}
}
}
}
Должен ли я создать две новые схемы на Project
а также User
по линии
class Project extends Model {
static get tableName() {
return 'project'
}
static get relationMappings() {
return {
userprojects: {
relation: Model.HasManyRelation,
modelClass: UserProjects,
join: {
from: 'project.id',
to: 'userprojects.project_id'
}
}
}
}
}
class User extends Model {
static get tableName () {
return 'user'
}
static get relationMappings () {
return {
timesheet: {
relation: Model.HasManyRelation,
modelClass: Timesheet,
join: {
from: 'user.id',
to: 'timesheet.user_id'
}
},
userprojects: {
relation: Model.HasManyRelation,
modelClass: UserProjects,
join: {
from: 'user_id',
to: 'userprojects.user_id'
}
}
}
}
}
В этом сценарии: как бы я добавил пользователей в проект? Сквозь UserProjects
Таблица?
1 ответ
Я бы создал метод для добавления проекта для модели User, такой как:
class User extends Model {
static get tableName () {
return 'user'
}
static get relationMappings () {
return {
timesheet: {
relation: Model.HasManyRelation,
modelClass: Timesheet,
join: {
from: 'user.id',
to: 'timesheet.user_id'
}
},
userprojects: {
relation: Model.HasManyRelation,
modelClass: UserProjects,
join: {
from: 'user.id',
to: 'userprojects.user_id'
}
}
}
}
static getModel(knex) {
return User.bindKnex(knex)
}
static async getUser(knex, id) {
return await User.getModel(knex).query().eager('[timesheet, userprojects]').where('id', id).first()
}
async addProject(projectId){
return await this.knex()
.$relatedQuery('userprojects')
.insert({project_id: projectId})
}
}
Будь совет, я ничего не проверял, просто напиши здесь. Но так я бы организовал код.