sequelize,mysql关联查询结果,如何排除不要的字段(中间产生字段)

发布于 2022-09-12 23:14:43 字数 2220 浏览 51 评论 0

问题描述

关联查询,如果排除不要的字段(产生的中间字段)
一个作者表,一个新闻表。
每条新闻,都包含一个作者
查询新闻列表时,需要关联查询出作者的名字,并返回前端
我想要只返回作者名字,而不是返回一个对象(里面包含名字)
我要如何排除这个对象字段呢,让其不返回

问题出现的环境背景及自己尝试过哪些方法

eggjs,各种尝试exclude,不起作用

相关代码

作者模型如下,id和lable

module.exports = (app) => {
    const { STRING, INTEGER } = app.Sequelize;
    const Author = app.model.define(
        "Author",
        {
            id: {
                type: INTEGER,
                primaryKey: true,
                autoIncrement: true
            },
            label: {
                type: STRING,
                unique: true,
                allowNull: false
            }
        },
        {
            tableName: "sys_author"
        }
    );
    return Author;
};

新闻模型如下,添加新闻时,需要选择一个作者

module.exports = (app) => {
    const { STRING, INTEGER } = app.Sequelize;
    const News = app.model.define(
        "News",
        {
            id: {
                type: INTEGER,
                primaryKey: true,
                autoIncrement: true
            },
            title: {
                type: STRING,
                allowNull: false
            },
            author: {
                type: STRING,
                allowNull: false
            }
        },
        {
            tableName: "sys_news"
        }
    );
    News.associate = function () {
        app.model.News.belongsTo(app.model.Author, { foreignKey: 'author', targetKey: 'id' })
    }

    return News;
}

查询新闻列表时,需要把作者名字查出来,如下

const { count, rows } = await this.ctx.model.News.findAndCountAll({
            include: [
                { model: this.ctx.model.Author, attributes: ['label'] }
            ],
            attributes: {
                include: [
                    [Sequelize.col('Author.label'), 'authorLabel'],
                ],
                exclude: ['Author']   // 不起作用
            }
        })

此时,返回的数据结构中包含Author和authorLabel

Author: {label: "牛银苗"},
authorLabel: "牛银苗"

你期待的结果是什么?实际看到的错误信息又是什么?

我不想要返回Author对象,上面代码中加的exclude: ['Author']不起作用
请问一下,我不要返回关联查询中产生的对象Author,只要authorLabel
如何做到呢,代码应该如何修改,请指点

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

怕倦 2022-09-19 23:14:43
const { count, rows } = await this.ctx.model.News.findAndCountAll({
            include: [
                { model: this.ctx.model.Author, attributes: [], required: true }
            ],
            attributes: {
                include: [
                    [Sequelize.col('Author.label'), 'authorLabel'],
                ]
            }
        })
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文