Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.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 使用联接上的OR语句对include进行续集_Javascript_Node.js_Sequelize.js_Chat - Fatal编程技术网

Javascript 使用联接上的OR语句对include进行续集

Javascript 使用联接上的OR语句对include进行续集,javascript,node.js,sequelize.js,chat,Javascript,Node.js,Sequelize.js,Chat,我有一个具有以下关系的用户实体: User.associate = (models) => { User.belongsToMany(User, { as: "friends", through: "user_friend", onDelete: "CASCADE", }) User.hasMany(models.Message, { as: "sentMessages", foreignKey: "senderId" })

我有一个具有以下关系的用户实体:

  User.associate = (models) => {
    User.belongsToMany(User, {
      as: "friends",
      through: "user_friend",
      onDelete: "CASCADE",
    })
    User.hasMany(models.Message, { as: "sentMessages", foreignKey: "senderId" })
    User.hasMany(models.Message, {
      as: "receivedMessages",
      foreignKey: "recipientId",
    })
  }
  Message.associate = (models) => {
    Message.belongsTo(models.User, { foreignKey: "senderId" })
    Message.belongsTo(models.User, { foreignKey: "recipientId" })
  }
以及具有以下关系的消息实体:

  User.associate = (models) => {
    User.belongsToMany(User, {
      as: "friends",
      through: "user_friend",
      onDelete: "CASCADE",
    })
    User.hasMany(models.Message, { as: "sentMessages", foreignKey: "senderId" })
    User.hasMany(models.Message, {
      as: "receivedMessages",
      foreignKey: "recipientId",
    })
  }
  Message.associate = (models) => {
    Message.belongsTo(models.User, { foreignKey: "senderId" })
    Message.belongsTo(models.User, { foreignKey: "recipientId" })
  }
我正在尝试这样做:
给我一个用户,包括他们的朋友,包括他们与每个朋友的对话历史,使用以下方法:

    let user = await User.findOne({
      where: {
        auth_key: auth_key,
      },
      include: {
        association: "friends",
        attributes: ["first_name", "last_name", "chat_name", "profile_picture"],
        through: {
          attributes: [],
        },
        include: [
          {
            required: false,
            association: "sentMessages",
            where: {
              recipientId: 1,
            },
          },
          {
            required: false,
            association: "receivedMessages",
            where: {
              senderId: 1,
            },
          },
        ],
      },
    })
这确实是一种工作,但它似乎真的很混乱,我不喜欢将消息分为
发送
接收
,我只希望它们组合在一起。当前的响应如下所示:

{
    "id": 1,
    "username": "ajsmith",
    "first_name": "Anthony",
    "last_name": "Smith",
    "chat_name": "Anthony.Smith",
    "email": "a@gmail.com",
    "createdAt": "2020-06-15T19:59:58.000Z",
    "updatedAt": "2020-06-15T19:59:58.000Z",
    "friends": [
        {
            "first_name": "Sarah",
            "last_name": "Smith",
            "chat_name": "Sarah.Smith",
            "sentMessages": [
                {
                    "id": 2,
                    "senderId": 2,
                    "recipientId": 1,
                    "type": "text",
                    "content": "Hi",
                    "createdAt": "2020-06-15T19:59:58.000Z",
                    "updatedAt": "2020-06-15T19:59:58.000Z"
                }
            ],
            "receivedMessages": [
                {
                    "id": 1,
                    "senderId": 1,
                    "recipientId": 2,
                    "type": "text",
                    "content": "Hello",
                    "createdAt": "2020-06-15T19:59:58.000Z",
                    "updatedAt": "2020-06-15T19:59:58.000Z"
                }
            ]
        }
    ]
}
我不确定我的关系是错误的,我的查询是错误的,还是根本不可能做到,但在过去的一周里,我搜索了sequelize文档、stackoverflow以及介于两者之间的所有内容,但没有找到解决方案。似乎如果我可以在正在发生的
左外部联接
上包含
语句,那么我可以在senderId或recipientId为我的用户的位置发送和接收消息