【问题标题】:identify how to retrieve result set data (node.js + sequelize + foreign key mysql)确定如何检索结果集数据(node.js + sequelize + 外键 mysql)
【发布时间】:2021-02-05 20:11:56
【问题描述】:

我搜索了几个帖子。有很多关于会员和加入的信息;但我的问题我无法解决。我相信这部分是因为我是这些工具的初学者。 我们来看数据:

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: [categorias]。 我应该怎么做才能访问字段 categoria.nome?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-06
      • 1970-01-01
      • 2019-06-29
      • 1970-01-01
      • 2016-03-09
      • 2019-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多