确定如何检索结果集数据(node.js + sequelize + 外键 mysql)
identify how to retrieve result set data (node.js + sequelize + foreign key mysql)
我搜索了几个帖子。关于membership和join的信息很多;但我无法解决我的问题。我相信这部分是因为我是这些工具的新手。
让我们来看看数据:
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句(完美):
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?
像这样从模型实例中获取普通对象:
const plainObjects = postagens.map(x => x.get({ plain: true }))
我搜索了几个帖子。关于membership和join的信息很多;但我无法解决我的问题。我相信这部分是因为我是这些工具的新手。 让我们来看看数据:
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句(完美):
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?
像这样从模型实例中获取普通对象:
const plainObjects = postagens.map(x => x.get({ plain: true }))