Как модель (пользователь) может иметь только одну другую модель (например, рабочее место), но рабочее место принадлежит многим пользователям в Sequelize.js? - PullRequest
0 голосов
/ 04 июля 2019

Я хотел бы иметь одну модель (это пользователь), которая принадлежит одной другой модели (это должно быть рабочее место), но на рабочем месте (например, Apple) должно быть много пользователей, которые принадлежат им,Как я могу сделать это с помощью Sequelize?

Я уже пытался использовать один User.hasOne(models.Workplace), но это позволяет каждому рабочему месту иметь только одного пользователя, поскольку он создает столбец UserId в таблице Workplace.

Это код моей модели пользователя:

module.exports = (sequelize, DataTypes) => {
    const User = sequelize.define('User', {
        id: {
            autoIncrement: true,
            primaryKey: true,
            type: DataTypes.INTEGER
        },
        username: {
            type: DataTypes.STRING
        },
        firstname: {
            type: DataTypes.STRING
        }
    }, {})

    User.associate = (models) => {
        models.User.hasOne(models.User)
    }

    return User
}

А это код моей модели на рабочем месте:

module.exports = (sequelize, DataTypes) => {
    const Workplace = sequelize.define('Workplace', {
        id: {
            type: DataTypes.INTEGER,
            autoIncrement: true,
            primaryKey: true
        },
        name: {
            type: DataTypes.STRING
        }
    }, {})

    return Workplace
}

Спасибо!

1 Ответ

0 голосов
/ 05 июля 2019

Давайте подумаем об этой проблеме на более низком уровне.

Я предполагаю, что вы используете какую-то реляционную базу данных, поскольку вы используете Sequelize поверх нее.

Ваше требование состоит в том, чтобы у пользователя была только одна другая модель (например, рабочее место), но рабочее место принадлежит многим пользователям.

Это может быть переведено в user модель имеет внешний ключ workplaceId в своей таблице и workspace не имеет внешнего ключа в своей таблице.

Например, { userId: 1, workspaceId: 1 }, { userId: 2, workspaceId: 1 }, { workspaceId: 1 } будет тем, что вы ожидали.

Как мы можем этого достичь?

Просто установите belongsTo отношение в user модели. (Генерирует workspaceId в вашей таблице)

Всегда хорошо сначала думать о слое базы данных, потому что в конце концов Sequelize - это просто абстрактный слой для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...