【问题标题】:sequelize associations foreignKey续集关联foreignKey
【发布时间】:2019-02-12 00:15:37
【问题描述】:

我想要 INNER JOIN 与 sequelize db: postgress 我有 2 个数据库(用户和帖子)

用户

import Sequelize from "sequelize";
import { sequelize } from "../databases/database";
import Post from "./Post";
const User = sequelize.define(
    "user",
    {
        id: {
      type: Sequelize.INTEGER,
      autoIncrement: true,
      primaryKey: true
        },
        username: {
            type: Sequelize.STRING,

        },
        password: {
            type: Sequelize.STRING
        },
        image: {
            type: Sequelize.STRING
        }
    },
    { timestamps: false }
);
User.hasMany(Post, { foreignKey: "author", sourceKey: "username" });
Post.belongsTo(User, { foreignKey: "author", sourceKey: "username" });
export default User;

帖子

import Sequelize from "sequelize";
import { sequelize } from "../databases/database";

const Post = sequelize.define("post", {
  id: {
    type: Sequelize.INTEGER,
    primaryKey: true
  },
  title: {
    type: Sequelize.TEXT
  },
  content: {
    type: Sequelize.TEXT
  },
  image: {
    type: Sequelize.STRING
  },
  description: {
    type: Sequelize.TEXT
  },
  tags: {
    type: Sequelize.STRING
  },
  author: {
    type: Sequelize.STRING
  },
  createdAt: {
      field: 'createdat',
      type: Sequelize.DATE
  },
  updatedAt: {
    field: 'updatedat',
    type: Sequelize.DATE
  }
});

export default Post;

控制器

export const listAllPosts = async params => {
    const { offset } = params;

    try {
        const allPosts = await Post.findAll({
            // limit: 20,
            // offset: offset ? offset * 20 : 0,
            // order: [["id", "DESC"]],
            attributes: ["title", "content","tags","description","createdAt","updatedAt"],
            required: true,
            include:[
                {
                    model:User,
                    attributes: ["username", "image"],
                    required:true,
                }
            ]
        });
        return allPosts;
    } catch (error) {
        throw error;
    }
};

当我收集 api 时显示错误:

执行中(默认):SELECT "post"."id", "post"."title", “帖子”。“内容”,“帖子”。“标签”,“帖子”。“描述”, "post"."createdat"AS "createdAt", "post"."updatedat" AS "updatedAt", "user"."id" AS "user.id", "user"."username" AS "user.username", "user"."image" AS "user.image" FROM "posts" AS "post" INNER JOIN “用户”作为“用户”在“帖子”上。“作者”=“用户”。“id”; 错误:SequelizeDatabaseError:运算符不存在:文本 = 整数

但我想显示准确,我不想更改primaryKey:

SELECT "post"."title", "post"."content", "post"."tags", "post"."description", "post"."createdat"AS "createdAt", "post"."updatedat" AS "updatedAt", "user"."username" AS "user.username", "user"."image" AS "user.image" FROM "posts" AS "post" INNER JOIN "users" AS "user" ON "post"."author" = "user"."username";

我该怎么做?

【问题讨论】:

    标签: postgresql associations sequelize.js


    【解决方案1】:

    您最好使用“userId”而不是“author”。它会解决你的问题。 并编辑关联

    User.hasMany(Post, { foreignKey: "userId", sourceKey: "id" });
    Post.belongsTo(User, { foreignKey: "id", sourceKey: "userId" });
    

    并建议您阅读 https://www.essentialsql.com/get-ready-to-learn-sql-database-normalization-explained-in-simple-english/

    【讨论】:

    • 我已经解决了 User.hasMany(Post,{foreignKey: "author", sourceKey:"username"}) Post.belongsTo(User,{foreignKey: "author", targetKey: "username" })
    猜你喜欢
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多