egg icon indicating copy to clipboard operation
egg copied to clipboard

关于连表查询嵌套太多的问题

Open dgjlovehyz opened this issue 4 years ago • 0 comments

超过三级嵌套的时候,想合利用Sequelize.col()合并字段

正常合并字段

await this.ctx.model.Student.findAll({
    attributes: [[this.app.Sequelize.col('subject.name'), 'subjectName']],
    include: [
        {
            model: this.ctx.model.Subject,
            as: 'subject',
           attributes[]
        }
    ]
})

预期结果

[
    {
        "id": "1",
        "name": "student1",
        "subjectName": "数学"
    },
    {
        "id": "1",
        "name": "student1",
        "subjectName": "语文"
    }
]

如果加一级成绩,并且吧成绩合并到学科这一级

await this.ctx.model.Student.findAll({
    include: [
        {
            model: this.ctx.model.Subject,
            as: 'subject',
            attributes: [[this.app.Sequelize.col('subject->studentScores.score'), 'subjectScore']],
            include: [
                {
                    model: this.ctx.model.StudentScores,
                    as: 'studentScores',
                }
            ]
        }
    ]
})

结果会报错

Unknown column 'subject.subject->studentScores.score' in 'field list' 框架会默认吧前面的表名加上! 如果是四级 Unknown column 'subject->studentScores.${Sequelize.col()}' in 'field list'

这到底是一个缺陷呢还是我没有找到方法

相关环境信息

  • 操作系统:windows
  • Node 版本:v12.13.0
  • Egg 版本:2.15.1

dgjlovehyz avatar Feb 25 '21 07:02 dgjlovehyz