sql >> Database teknologi >  >> RDS >> PostgreSQL

Efterfølger, hvordan man strukturerer chat-delen af ​​appen?

Alle modeller ser godt ud. Problemerne er hos foreninger.

Hvis du definerer mere end én tilknytning mellem de samme to modeller, bør du angive forskellige aliaser for at skelne dem fra hinanden i forespørgsler.

User.hasMany(Messages, {
foreignKey: 'senderId',
as: 'OutgoingMessages'
});

User.hasMany(Messages, {
foreignKey: 'receiverId',
as: 'IncomingMessages'
});
Messages.belongsTo(models.User, {
foreignKey: "senderId",
as: 'Sender'
});
Messages.belongsTo(models.User, {
foreignKey: "receiverId",
as: 'Receiver'
});

Det er også bedre at definere associationer på samme måde enten direkte efter modeldefinition eller i en statisk metode som associate . Sidstnævnte tilgang er at foretrække, fordi den gør det muligt at definere hver model i sit eget modul uden krydsreferencer ved hjælp af models parameter i associate metode til at få adgang til andre modeller, der skal være knyttet til en given model.

Sidste note:prøv at definere associationer, hvor en model på venstre side af en associationsdefinition i sin egen associate metode. Det betyder, at

models.Message.belongsTo(Conversations);

skal være i Message model associate metode:

Message.belongsTo(models.Conversations);

På den måde ved du altid, hvor du kan finde alle associationer, der definerer links fra en bestemt model til andre modeller.

OPDATERING

Du bør gemme en fundet eller en oprettet samtale til en variabel for at bruge den, mens du opretter en besked:

let conversation = await Conversations.findOne({
  where:{
    user1:{[Op.or]:[req.user.id,post.userId]},
    user2:{[Op.or]:[req.user.id,post.userId]},
    PostId:req.body.postId,
  }
})

if (!conversation){
  conversation = await Conversations.create({
    user1: req.user.id,
    user2: post.userId,
    PostId:req.body.postId,
  })
}
const newMessage = await Messages.create({
  senderId: req.user.id,
  receiverId: post.userId,
  message: req.body.message,
  conversationId:conversation.id
})
res.status(201).send({
  msg: "upload successful",
});

Forsøg ikke at blande then/catch sammen og await . Hvis du bruger await du vil allerede have et resultat eller en undtagelse (som du kan håndtere ved at bruge try/catch ).




  1. PHP sikker brugervariabel

  2. PHP MySQL-søgning med flere kriterier

  3. mysql &php søgefremhævning

  4. postgresql join 2 tabeller