PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Trình tự hóa cách cấu trúc phần trò chuyện của ứng dụng?

Tất cả các mô hình trông tốt. Vấn đề là với các liên kết.

Nếu bạn xác định nhiều hơn thì một liên kết giữa hai mô hình giống nhau, bạn nên chỉ ra các bí danh khác nhau để phân biệt chúng với nhau trong các truy vấn.

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'
});

Ngoài ra, tốt hơn nên xác định các liên kết theo cùng một cách hoặc trực tiếp sau định nghĩa mô hình hoặc trong một phương thức tĩnh như associate . Cách tiếp cận thứ hai thích hợp hơn vì nó cho phép xác định từng mô hình trong mô-đun riêng của nó mà không có bất kỳ tham chiếu chéo nào bằng cách sử dụng models tham số trong associate để truy cập các mô hình khác nên được liên kết với một mô hình nhất định.

Lưu ý cuối cùng:cố gắng xác định các liên kết trong đó một mô hình ở phía bên trái của định nghĩa liên kết trong associate của chính nó phương pháp. Nó có nghĩa là

models.Message.belongsTo(Conversations);

phải ở trong Message mô hình associate phương pháp:

Message.belongsTo(models.Conversations);

Bằng cách đó, bạn luôn biết nơi để tìm tất cả các liên kết xác định các liên kết từ một mô hình nhất định đến các mô hình khác.

CẬP NHẬT

Bạn nên lưu trữ một cuộc hội thoại đã tìm thấy hoặc đã tạo vào một biến để sử dụng nó trong khi tạo thông báo:

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",
});

Đừng cố trộn lẫn then/catchawait . Nếu bạn sử dụng await bạn sẽ có một kết quả hoặc một ngoại lệ (bạn có thể xử lý bằng cách sử dụng try/catch ).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giá trị SQL của ngày trước đó (không xác định)

  2. Lỗi 'Chứng chỉ tự ký' trong khi truy vấn cơ sở dữ liệu Postgres được lưu trữ trên Heroku từ ứng dụng Node.js

  3. Django JSONField

  4. Làm thế nào để tăng khóa chính trong khi chèn hàng loạt postgres COPY?

  5. Sắp xếp tổng hợp văn bản được tạo bằng array_agg trong postgresql