簡體   English   中英

為什么在 sequelize 中通過關聯更新如此困難

[英]Why is it so diffuclt to update by association in sequelize

我有兩個模型通過源 Model 上的 hasMany 關聯。我第一次使用 Sequelize 花了一段時間,但我已經能夠創建一個新用戶並使用 include 參數獲取數據庫中的用戶列表. 但是當我嘗試使用包含更新時,它確實更新了源 Model,但沒有更新關聯的 model 上的信息

Model 1

import Sequelize from "sequelize";
import database from "../index";
import PlayerSkill from "./playerSkill";

const Player = database.define(
    "player",
    {
        id: {
            type: Sequelize.INTEGER,
            autoIncrement: true,
            allowNull: false,
            primaryKey: true,
        },
        name: {
            type: Sequelize.STRING(200),
            allowNull: false,
        },
        position: {
            type: Sequelize.STRING(200),
        },
    },
    {
        timestamps: false,
    }
);

Player.hasMany(PlayerSkill, {
    // through: "players_skills",
    as: "playerSkills",
    timestamps: false,
    foreignKey: false,
    // attributes: { exclude: ["playerSkillId"] },
});

// Player.hasMany(PlayerSkill);
// PlayerSkill.belongsTo(Player);

export default Player;

Model 2

import Sequelize from "sequelize";
import database from "../index";

const PlayerSkill = database.define(
    "playerSkill",
    {
        id: {
            type: Sequelize.INTEGER,
            autoIncrement: true,
            allowNull: false,
            primaryKey: true,
        },
        skill: {
            type: Sequelize.STRING(200),
        },
        value: {
            type: Sequelize.INTEGER,
        },
    },
    {
        timestamps: false,
    }
);

export default PlayerSkill;

創建路線工作正常

   import Player from "../../db/model/player";
    import PlayerSkill from "../../db/model/playerSkill";
    
    export default async (req, res) => {
        const { name, position, playerSkills } = req.body;
        try {
            const player = await Player.create(
                {
                    name,
                    position,
                    playerSkills,
                },
                {
                    include: "playerSkills",
                }
            );
            console.log(`Player created and saved!`);
            res.json(player);
        } catch (error) {
            console.log(error.stack);
        }
    };



import Player from "../../db/model/player";

export default async (req, res) => {
    const requestedId = req.params.id;
    try {
        const { name, position, playerSkills } = req.body;
        const player = await Player.update(
            {
                name,
                position,
                playerSkills,
            },
            {
                include: "playerSkills",
                where: { id: requestedId },
            }
        );
        res.json(player);
    } catch (error) {
        console.log(` This is the error ${error}`);
    }
};

更新只會更新玩家表

import Player from "../../db/model/player";

export default async (req, res) => {
    const requestedId = req.params.id;
    try {
        const { name, position, playerSkills } = req.body;
        const player = await Player.update(
            {
                name,
                position,
                playerSkills,
            },
            {
                include: "playerSkills",
                where: { id: requestedId },
            }
        );
        res.json(player);
    } catch (error) {
        console.log(` This is the error ${error}`);
    }
};

該模型的update方法不支持include選項,因此您需要使用主 model 中生成的輔助方法來添加/更改/刪除關聯項,或者使用關聯 model 的直接方法來執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM