Я искал несколько сообщений. Есть много информации о членстве и присоединении; но свою проблему я не мог решить. Я верю в это отчасти потому, что я новичок в инструментах. Переходим к данным:

Categories.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]
    },
...

Вопрос:

Он не отображает содержимое категории, а только отображается: category: [category]. Что мне делать, чтобы получить доступ к полю category.nome?

0
tonsig 22 Окт 2020 в 21:36

1 ответ

Лучший ответ

Просто получите простые объекты из экземпляров модели, например:

const plainObjects = postagens.map(x => x.get({ plain: true }))
0
Anatoly 22 Окт 2020 в 18:47