>source

자식과 함께 모델을 쿼리하려고합니다. 자식은 소속을 사용하여 부모를 참조합니다. 부모를 찾고 그 결과에 자녀를 포함 시키려고합니다.

다음은 내 사용자 모델입니다 :

const Sequelize = require('sequelize');
const connection = require('../middleware/sql-connection');
const User = connection.define('USR', {
    'ID': { type: Sequelize.BIGINT, primaryKey: true },
    'NM': { type: Sequelize.STRING, allowNull: false },
    'EMAIL': { type: Sequelize.STRING, allowNull: false, validate: { isEmail: true } },
    'PHONE': { type: Sequelize.STRING, allowNull: false },
    'STS': { type: Sequelize.BOOLEAN, allowNull: false }
});
module.exports = User;

다음은 User_TC 모델입니다 :

const Sequelize = require('sequelize');
const connection = require('../middleware/sql-connection');
const User = require('./user');
const UserTC = connection.define('USR_TC', {
    'USR_ID': { type: Sequelize.BIGINT, primaryKey: true },
    'TC_ACPT': { type: Sequelize.BOOLEAN, allowNull: false }
});
UserTC.belongsTo(User, { as: 'User', foreignKey: 'USR_ID' });
module.exports = UserTC;

다음은 findOne 방법입니다 :

User.findOne({
    include: [
        { model: UserTC, as: 'userTc' }
    ],
    where: { ID: req.userData.id }
})
    .then(user => {
        return res.status(200).json(user);
    })
    .catch(err => {
        console.log(err);
        return res.status(500).json({
            message: err
        });
    });

출력으로 인해 오류가 발생합니다 : SequelizeEagerLoadingError: USR_TC is not associated to USR!

조언하십시오!

  • 답변 # 1

    필요하다

    User.hasMany(user_tc)||User.hasOne(User_tc)
    
    

    사용자로부터 usr_tc를 쿼리 할 수있게하려면

  • 답변 # 2

    좋아, 나는 이것을 달성하는 방법을 알아 냈다. 다음은 내가 한 일입니다.

    사용자 모델 :

    const Sequelize = require('sequelize');
    const connection = require('../middleware/sql-connection');
    const UserTC = require('./user-tc');
    const User = connection.define('USR', {
        'ID': { type: Sequelize.BIGINT, primaryKey: true },
        'NM': { type: Sequelize.STRING, allowNull: false },
        'EMAIL': { type: Sequelize.STRING, allowNull: false, validate: { isEmail: true } },
        'PHONE': { type: Sequelize.STRING, allowNull: false },
        'STS': { type: Sequelize.BOOLEAN, allowNull: false }
    });
    User.hasOne(UserTC, { as: 'userTc', foreignKey: 'USR_ID' });
    module.exports = User;
    
    

    내 User_TC 모델 :

    const Sequelize = require('sequelize');
    const connection = require('../middleware/sql-connection');
    const UserTC = connection.define('USR_TC', {
        'USR_ID': { type: Sequelize.BIGINT, primaryKey: true, references: 'USR', referencesKey: 'ID' },
        'TC_ACPT': { type: Sequelize.BOOLEAN, allowNull: false }
    });
    module.exports = UserTC;
    
    

    및 다음 findOne 메소드 :

    User.findOne({
        include: [
            { model: UserTC, as: 'userTc' }
        ],
        where: { ID: req.userData.id }
    })
        .then(user => {
            return res.status(200).json(user);
        })
        .catch(err => {
            console.log(err);
            return res.status(500).json({
                message: err
            });
        });
    
    

    매력처럼 작동 :) :) 다음은 내 출력입니다 :

    {
        "ID": "1",
        "NM": "Tenant-1",
        "EMAIL": "[email protected]",
        "PHONE": "1234567890",
        "STS": true,
        "userTc": {
            "USR_ID": "1",
            "TC_ACCPT": false
        }
    }
    
    

관련 자료

  • 이전 python - Django Admin의 변경 페이지에서 테이블을 사용하여 모델 필드 표시
  • 다음 java - 객체 인스턴스를 제네릭으로 메소드에 전달