Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在sequelize findAll方法上使用leftJoin_Javascript_Sequelize.js - Fatal编程技术网

Javascript 如何在sequelize findAll方法上使用leftJoin

Javascript 如何在sequelize findAll方法上使用leftJoin,javascript,sequelize.js,Javascript,Sequelize.js,如何使用sequelize findAll检查当前用户是否喜欢每一篇文章 where查询过滤posts数组对象。它需要检查当前用户是否喜欢帖子,但仍然可以获得所有数据 我需要做左连接吗其中userId==req.session.user.id 我正在使用sequelize和postgres。它几乎就是sql 我应该如何使用sequelize实现这一点 posts结构是什么样子的 以这段代码为例,这是我制作的laravel应用程序,我希望在sequelize中实现相同的实现 php(示例) p

如何使用sequelize findAll检查当前用户是否喜欢每一篇文章

where
查询过滤posts数组对象。它需要检查当前用户是否喜欢帖子,但仍然可以获得所有数据

我需要做左连接吗<代码>其中
userId==req.session.user.id

我正在使用sequelize和postgres。它几乎就是sql

我应该如何使用sequelize实现这一点

posts结构是什么样子的

以这段代码为例,这是我制作的laravel应用程序,我希望在sequelize中实现相同的实现

php(示例)

post.controller.js

 getPosts: async (req: any, res: Response) => {
    // use async/await here
    const posts = await models.Post.findAll({
      include: [
        { model: models.User, as: "author", attributes: ["username"] },
        // limit the likes based on the logged in user
        {
          model: models.Likes
        }
      ],
      order: [["createdAt", "DESC"]],
      limit: 6
    });
    // i dont think this is the right approach. 
    posts.forEach(post => {
      post.Likes.forEach(like => {
        console.log(like.userId);
        if (like.userId === req.session.user.id) {
          post.setDataValue("likedByMe", true);
        } else {
          post.setDataValue("likedByMe", false);
        }
      });
    });

    return res.json(posts);
"use strict";
module.exports = (sequelize, DataTypes) => {
    var Post = sequelize.define("Post", {
        title: DataTypes.STRING,
        postContent: DataTypes.STRING,
        liked: {
            type: DataTypes.VIRTUAL,
            allowNull: false,
            defaultValue: false,
            get: function () {
                return this.getDataValue('Likes').length ? true : false;
            }
        },
        likeCounts: {
            type: DataTypes.INTEGER,
            allowNull: false,
            defaultValue: 0,
            validate: {
                min: 0,
            }
        },
        authorId: DataTypes.INTEGER
    }, {});
    Post.associate = function (models) {
        Post.belongsTo(models.User, {
            as: "author",
            foreignKey: "authorId",
            onDelete: "CASCADE"
        });
        Post.hasMany(models.Likes, {
            foreignKey: "resourceId",
            timestamps: false,
            targetKey: "id",
            onDelete: "CASCADE"
        });
    };
    return Post;
};
post.js

 getPosts: async (req: any, res: Response) => {
    // use async/await here
    const posts = await models.Post.findAll({
      include: [
        { model: models.User, as: "author", attributes: ["username"] },
        // limit the likes based on the logged in user
        {
          model: models.Likes
        }
      ],
      order: [["createdAt", "DESC"]],
      limit: 6
    });
    // i dont think this is the right approach. 
    posts.forEach(post => {
      post.Likes.forEach(like => {
        console.log(like.userId);
        if (like.userId === req.session.user.id) {
          post.setDataValue("likedByMe", true);
        } else {
          post.setDataValue("likedByMe", false);
        }
      });
    });

    return res.json(posts);
"use strict";
module.exports = (sequelize, DataTypes) => {
    var Post = sequelize.define("Post", {
        title: DataTypes.STRING,
        postContent: DataTypes.STRING,
        liked: {
            type: DataTypes.VIRTUAL,
            allowNull: false,
            defaultValue: false,
            get: function () {
                return this.getDataValue('Likes').length ? true : false;
            }
        },
        likeCounts: {
            type: DataTypes.INTEGER,
            allowNull: false,
            defaultValue: 0,
            validate: {
                min: 0,
            }
        },
        authorId: DataTypes.INTEGER
    }, {});
    Post.associate = function (models) {
        Post.belongsTo(models.User, {
            as: "author",
            foreignKey: "authorId",
            onDelete: "CASCADE"
        });
        Post.hasMany(models.Likes, {
            foreignKey: "resourceId",
            timestamps: false,
            targetKey: "id",
            onDelete: "CASCADE"
        });
    };
    return Post;
};

我认为这个forEach语句有助于确定当前用户是否喜欢该帖子

 getPosts: async (req: any, res: Response) => {
    // use async/await here
    const posts = await models.Post.findAll({
      include: [
        { model: models.User, as: "author", attributes: ["username"] },
        // limit the likes based on the logged in user
        {
          model: models.Likes
        }
      ],
      order: [["createdAt", "DESC"]],
      limit: 6
    });

    posts.forEach(post => {
      if (post.Likes.length === 0) {
        post.setDataValue("likedByMe", false);
      }
      post.Likes.forEach(like => {
        console.log(like.userId);
        if (like.userId === req.session.user.id) {
          post.setDataValue("likedByMe", true);
        } else {
          post.setDataValue("likedByMe", false);
        }
      });
    });

    return res.json(posts);
  },