2015-08-17 6 views
2

Использование sequelize, я ожидаю эту строку:Sequelize belongsToMany не создает новую таблицу

m.User.belongsToMany(m.Company, {through: 'UserCompany'}); 

для создания новой таблицы в моей базе данных под названием «user_company», что бы связать «пользователя» таблицы и «компании» таблицы вместе. Однако это не так. Могу ли я недоразумение документации, когда он говорит

Это создаст новую модель под названием UserProject с с эквивалентными внешними ключами ProjectID и USERID. Являются ли атрибуты камешками или нет, зависит от двух моделей, соединенных таблицей (в в этом случае «Пользователь и проект»).

или я что-то не так?

Вот отношения Я настраиваю

m.Company.hasMany(m.User); 
m.User.belongsToMany(m.Company, { 
    through: m.UserCompany 
}); 

m.User.sync({force: true, match: /_test$/}); 
m.Company.sync({force: true, match: /_test$/}); 
m.UserCompany.sync({force: true, match: /_test$/}); 

ответ

1

Похоже, что мне нужно, чтобы создать модель UserCompany вручную. Так, UserCompany.js выглядит следующим образом:

module.exports = function(sequelize, DataTypes) { 

return sequelize.define('UserCompany', { 

}, { 
    freezeTableName: true, 
    paranoid: true 
}); 

} 

Тогда belongsToMany автоматически добавляет правильные столбцы таблицы.

+3

Это определенно не обязательно. Вы не забыли называть 'sequelize.sync' после создания ассоциаций? –

+0

Я звоню на каждую из моделей. Это то, что вы имели ввиду? Или вам нужно вызвать синхронизацию объекта sequelize? Возможно, в этом и проблема. Я отредактировал оригинальный вопрос, чтобы показать, как я устанавливаю отношения. – trentjones21

+0

Похоже, что вызов синхронизации на объект sequelize сделал трюк, как вы и предполагали. Благодаря! Еще один вопрос: если мне нужно добавить столбцы в таблицу UserCompany (например, столбец зарплаты, чтобы показать, сколько компания платит пользователю), мне нужно вручную создать мою собственную модель? – trentjones21

Смежные вопросы