mysql - 确定如何检索结果集数据(node.js + sequelize + 外键mysql)

标签 mysql node.js join foreign-keys sequelize.js

我搜索了几个帖子。有很多关于成员(member)和加入的信息;但我的问题我无法解决。我相信这部分是因为我是工具的第一次。
我们来看数据:
Categoria.js

const db   = require("./db");
const Categoria = db.sequelize.define('categorias', {
    nome: {
        type : db.Sequelize.STRING
    },
    slug: {
        type: db.Sequelize.TEXT
    } 
})
module.exports = Categoria
Postagem.js
const Categoria = require("./Categoria");
const db   = require("./db");
const Postagem = db.sequelize.define('postagens', {
    titulo: {
        type : db.Sequelize.STRING,
        required : true
    },
    slug: {
        type: db.Sequelize.TEXT,
        required : true
    },
    descricao: {
        type : db.Sequelize.STRING,
        required : true
    }, 
    conteudo: {
        type : db.Sequelize.STRING,
        required : true
    }, 
    categoriaId: {  // esse atributo é chave estrangeira
        type: db.Sequelize.INTEGER,
        required : true,
        allowNull: false,
        references: {            // Postagem belongsTo Categoria 1:1
          model: 'categorias',   // nome da tabela
          key: 'id'              // nome da coluna na tabela
        }
    }      
})

Postagem.belongsTo(Categoria, { foreignKey: 'categoriaId', foreignKeyConstraint: true, as: 'categoria' });

module.exports = Postagem
数据读取:
router.get("/postagens",(req, res) => {
    Postagem.findAll({
        include:[
            {
                model: Categoria, 
                require: true,
                as: 'categoria'

            }] 
    }).then(function(postagens){ 
       console.log(postagens) 
       res.render("admin/postagens", {postagens: postagens}) 
    }).catch(function(erro){
        req.flash("error_msg", "Erro ao procurar postagens: " + erro)
        res.redirect("/admin")
    })     
})
选择句(完美):
SELECT `postagens`.`id`, `postagens`.`titulo`, `postagens`.`slug`, `postagens`.`descricao`, `postagens`.`conteudo`, `postagens`.`categoriaId`, `postagens`.`createdAt`, `postagens`.`updatedAt`, `categoria`.`id` AS `categoria.id`, `categoria`.`nome` AS `categoria.nome`, `categoria`.`slug` AS `categoria.slug`, `categoria`.`createdAt` AS `categoria.createdAt`, `categoria`.`updatedAt` AS `categoria.updatedAt` FROM `postagens` AS `postagens` LEFT OUTER JOIN `categorias` AS `categoria` ON `postagens`.`categoriaId` = `categoria`.`id`;
Json 邮资:
[
  postagens {
    dataValues: {
      id: 2,
      titulo: 'UX',
      slug: 'ux',
      descricao: 'O que é UX?',
      conteudo: 'O conceito de ux na web bla bla bla bla bla e mais bla',
      categoriaId: 1,
      createdAt: 2020-10-21T14:05:32.000Z,
      updatedAt: 2020-10-21T14:05:32.000Z,
      categoria: [categorias]
    },
...
问题:
它不显示类别内容,只显示:类别:[类别]。
我应该怎么做才能访问字段categoria.nome?

最佳答案

只需从这样的模型实例中获取普通对象:

const plainObjects = postagens.map(x => x.get({ plain: true }))

关于mysql - 确定如何检索结果集数据(node.js + sequelize + 外键mysql),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64488531/

相关文章:

php - 在数据库中搜索多行

javascript - 使用状态和模板文字进行重定向 react

node.js - Express NodeJS 服务器中的 HTTP 文件上传

mysql - 连接两个表的 Zend_Db 查询

php - 在 PHP 应用程序中使用 MySQL View

php - Mysql 连接并回显所有行,有条件

javascript - 如何安全地转义 bigquery Node 插入的用户输入?可以在 bigquery.insert Node 库上使用参数化查询吗?

mysql - 检查记录是否包含 IN 运算符的所有值

mysql - 尽管有索引,查询仍然非常慢

mysql - php JOIN 语句仅返回第二个表中的一行