[英]How do I call field data from an associated table?
在帶有 mysql 和 sequelize 的 nodejs 中,我使用 findAll function 通過 controller 呈現頁面,並包含兩個關聯表。 然后我渲染一個視圖頁面。 我瀏覽了主表中列出字段數據的表,並希望從另一個表中添加一些相關日期。 具體來說,我將表 Sales 中的 saleId 存儲在表 Project 中。 當我列出項目的行時,我想在銷售中包含與存儲在項目外鍵中的銷售對應的名稱。
我將包含下面的代碼,但結果是:TypeError: E:\cjrfull\views\index.ejs:26 24| 25| <%= project.address %>, <%= project.csz %>
26| 銷售代表:<%= project.sales.name %>
27| 項目經理:<%= project.supervisor.name %></small> --> 28| 29|
無法讀取 eval 時未定義的屬性“名稱”(編譯時的 eval (E:\cjrfull\node_m
From app.js:
const sequelize = require('./util/database');
const Project = require('./models/project');
const Sales = require('./models/sales');
const Supervisor = require('./models/supervisor');
...
Project.belongsTo(Sales);
Sales.hasMany(Project);
Project.belongsTo(Supervisor);
Supervisor.hasMany(Project);
from model Project.js:
const Project = sequelize.define('project', {
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
allowNull: false,
primaryKey: true
},
projectNo: Sequelize.STRING,
owner1Fn: Sequelize.STRING,
owner1Ln: Sequelize.STRING,
owner2Fn: Sequelize.STRING,
owner2Ln: Sequelize.STRING,
address: {
type: Sequelize.STRING,
allowNull: false
},
csz: Sequelize.STRING,
});
from model Sales.js:
const Sales = sequelize.define('sales', {
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
allowNull: false,
primaryKey: true
},
name: {
type: Sequelize.STRING,
allowNull: false
}
});
from Controller:
exports.getIndex = (req, res, next) => {
Project.findAll({
include: [{
model: Sales
}],
include: [{
model: Supervisor
}]
})
.then(projects => {
res.render('index', {
projs: projects,
pageTitle: 'Index',
path: '/'
});
})
.catch(err => console.log(err));
};
from View file Index.ejs:
<% for (let project of projs) { %>
<a href="/project/<%= project.id %>" class="list-group-item list-group-item-action active" style="background-color: darkgreen" style="border-color: darkgreen">
<div class="d-flex w-100 justify-content-between">
<h5 class="mb-1">
<%= project.owner1Fn %>
<%= project.owner1Ln %><span> & </span>
<%= project.owner2Fn %>
<%= project.owner2Ln %>
</h5>
<small>Job: <%= project.id %> Project: <%= project.projectNo %></small>
</div>
<p class="mb-1">
<%= project.address %>, <span><%= project.csz %></p>
<small>Sales Rep: <%= project.sales.name %> </small><br>
<!-- <small>Project Manager: <%= project.supervisor.name %></small> -->
</a>
<br>
<% } %>
問題在於您如何包含相關模型。 您需要將它們添加到同一個數組中。
Project.findAll({
include: [{
model: Sales
}, {
model: Supervisor
}]
})
從文檔:
使用左連接急切加載的關聯列表。 支持是 { 包括:[ Model1, Model2, ...]}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.