У меня следующие модели:
Sports.init({
name: {
type: DataTypes.STRING,
unique: true,
allowNull: false
}
}, {sequelize, tableName: 'sports'});
Leagues.init({
name: {
type: DataTypes.STRING,
unique: true,
allowNull: false
}
}, {sequelize, tableName: 'leagues'});
Связь между ними следующая.
Sports.Leagues = Sports.hasMany(Leagues, {foreignKey: {name: "sports_id", allowNull: false}, sourceKey: "id"});
Leagues.Sports = Leagues.belongsTo(Sports, {foreignKey: {name: "sports_id", allowNull: false}, targetKey: "id"});
У меня уже есть запись в таблице Sports: {name: "Basketball", id: 1}
I хотите создать запись в таблице Лиги, ссылающуюся на уже существующую спортивную запись. Как я могу сделать это с помощью одной функции? Я просмотрел документацию, но ничего подходящего там не нашел. Я знаю, что смогу сделать это следующим образом, если запись, на которую я ссылаюсь, не существует:
await Leagues.create({name: leagueName, espn_name: espnName, Sport: {name: "Basketball"}}, {include: Leagues.Sports});
Однако я не нашел ничего о том, как это сделать , если внешний ключ уже существует, кроме ручного выполнения чего-то вроде этого:
await Sports.findOne({where: {name: sportName}}).then((res) => {
if(res) {
return Leagues.create({name: leagueName, espn_name: espnName, sports_id: res.get("id")});
}
});
Мне кажется, что это слишком много кода для относительно простой операции. Есть ли способ сделать это «умнее» или короче? Заранее спасибо!