簡體   English   中英

如何從關聯表中調用字段數據?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM