簡體   English   中英

續集上的一對一關系不起作用

[英]One-to-one relation on sequelize not working

我正在嘗試將 Sequelize 與 express.js 和 MySQL 一起使用,但我無法獲得一對一的工作關系。

API 始終使用字段中通知的整數響應address_id ,但不使用customers_addresses表中的信息。 我嘗試通過使用{ include: { all: true }}來強制加載,但沒有成功。

以下是涉及的文件。

有人可以幫忙嗎? :)

如何創建兩個表:

CREATE TABLE IF NOT EXISTS `customers_addresses` 
(`address_id` INTEGER NOT NULL auto_increment , `numero_casa` VARCHAR(255), 
`complemento` VARCHAR(255), `rua` VARCHAR(255), `bairro` VARCHAR(255), `cidade` 
VARCHAR(255), `estado` VARCHAR(2), `cep` VARCHAR(9), PRIMARY KEY (`address_id`))


CREATE TABLE IF NOT EXISTS `customers` (`customer_id` INTEGER NOT NULL auto_increment ,
 `first_name` VARCHAR(25) NOT NULL, `last_name` VARCHAR(50) NOT NULL, `cpf` CHAR(11) NOT NULL, 
`rg` VARCHAR(20) NOT NULL, `expedidor_rg` VARCHAR(20) NOT NULL, `inss_number` INTEGER,
 `inss_situation` INTEGER, `email` VARCHAR(30), `phone` VARCHAR(20), `gender` VARCHAR(1),
 `civil_state` VARCHAR(255), `address_id` INTEGER, PRIMARY KEY (`customer_id`), 
FOREIGN KEY (`address_id`) REFERENCES `customers_addresses` (`address_id`))

init-models.js 文件:

function initModels(sequelize) {
  var customers = _customers(sequelize, DataTypes);
  var customers_addresses = _customers_addresses(sequelize, DataTypes);

  customers.hasOne(customers_addresses, { foreignKey: "address_id"});
  customers_addresses.belongsTo(customers, { foreignKey: "address_id"});


  return {
    customers,
    customers_addresses,
  };
}

customers.js 模型:

const Sequelize = require('sequelize');
module.exports = function(sequelize, DataTypes) {
  return sequelize.define('customers', {
    customer_id: {
      autoIncrement: true,
      type: DataTypes.INTEGER,
      allowNull: false,
      primaryKey: true
    },
    first_name: {
      type: DataTypes.STRING(25),
      allowNull: false
    },
    last_name: {
      type: DataTypes.STRING(50),
      allowNull: false
    },
    cpf: {
      type: DataTypes.CHAR(11),
      allowNull: false
    },
    rg: {
      type: DataTypes.STRING(20),
      allowNull: false
    },
    expedidor_rg: {
      type: DataTypes.STRING(20),
      allowNull: false
    },
    inss_number: {
      type: DataTypes.INTEGER,
      allowNull: true
    },
    inss_situation: {
      type: DataTypes.INTEGER,
      allowNull: true
    },
    email: {
      type: DataTypes.STRING(30),
      allowNull: true
    },
    phone: {
      type: DataTypes.STRING(20),
      allowNull: true
    },
    gender: {
      type: DataTypes.STRING(1),
      allowNull: true
    },
    civil_state: {
      type: DataTypes.STRING(255),
      allowNull: true
    },
    address_id: {
      type: DataTypes.INTEGER,
      notNull: true,
      references: {
        model: 'customers_addresses',
        key: 'address_id'
      }
    }
  }, {
    sequelize,
    tableName: 'customers',
    timestamps: false
  });
};

API 控制器如何調用它:

customers.findAll({ include: { all: true }})

最后執行的查詢:

Executing (default): SELECT `customer_id`, `first_name`, `last_name`, `cpf`, `rg`, `expedidor_rg`, `inss_number`, `inss_situation`, `email`, `phone`, `gender`, `civil_state`, `address_id` FROM `customers` AS `customers`;

在您的 API 控制器中嘗試此操作。 我認為我們應該調用與客戶表有關聯的模型名稱

customers.findAll({include: [{model:customer_addresses}]})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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