PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Sekuel bagaimana menyusun bagian obrolan aplikasi?

Semua model terlihat bagus. Masalahnya ada pada asosiasi.

Jika Anda mendefinisikan lebih dari satu asosiasi antara dua model yang sama, Anda harus menunjukkan alias yang berbeda untuk membedakannya satu sama lain dalam kueri.

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

Juga lebih baik untuk mendefinisikan asosiasi dengan cara yang sama baik secara langsung setelah definisi model atau dalam metode statis seperti associate . Pendekatan terakhir lebih disukai karena memungkinkan untuk mendefinisikan setiap model dalam modulnya sendiri tanpa referensi silang menggunakan models parameter di associate metode untuk mengakses model lain yang harus dikaitkan dengan model tertentu.

Catatan terakhir:coba definisikan asosiasi di mana model di sisi kiri definisi asosiasi dalam associate-nya sendiri metode. Artinya

models.Message.belongsTo(Conversations);

harus dalam Message model associate metode:

Message.belongsTo(models.Conversations);

Dengan begitu, Anda selalu tahu di mana menemukan semua asosiasi yang mendefinisikan tautan dari model tertentu ke model lain.

PERBARUI

Anda harus menyimpan percakapan yang ditemukan atau dibuat ke variabel untuk menggunakannya saat membuat pesan:

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

Jangan mencoba mencampuradukkan then/catch dan await . Jika Anda menggunakan await Anda sudah memiliki hasil atau pengecualian (yang dapat Anda tangani menggunakan 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. Jalankan Pemicu pada Tampilan?

  2. Menggunakan klausa KECUALI di PostgreSQL

  3. Mengembalikan set baris dari fungsi plpgsql.

  4. Mendapatkan kunci yang dibuat secara otomatis dari penyisipan baris di musim semi 3 / PostgreSQL 8.4.9

  5. pemilihan baris acak cepat di Postgres