Tajuk ditulis semula sebagai: Gunakan Sequelize untuk mengira bilangan baris dalam jadual berkaitan
P粉792026467
P粉792026467 2023-08-27 22:35:45
0
1
404
<p>Menggunakan sequelize dan mySQL, saya mempunyai dua jadual: <code>User</code> dan <code>Post</code>. </p> <p>Hubungan antara dua jadual ialah <code>M:N</code></p> <pre class="brush:php;toolbar:false;">db.User.belongsToMany(db.Post, { through: "Likes", as: "Likes" }); db.Post.belongsToMany(db.User, { through: "Likes", as: "Likes" });</pre> <p>Apa yang saya mahukan ialah mendapatkan semua id suka dan bilangan suka siaran. </p> <p>Saya tahu anda boleh mendapatkan <code>semua likers</code> </p> <pre class="brush:php;toolbar:false;">const post = tunggu Post.findOne({ di mana: { id: postId }, atribut: ["id", "title", "imageUrl"], termasuk: [{ model: Pengguna, sebagai: "Penyuk", atribut: ["id"], melalui: { atribut: [] }, }] }) // keputusan { "id": 36, "title": "ujian", "imageUrl": "하늘이_1644886996449.jpg", "Peminat": [ { "id": 13 }, { "id": 16 } ] }</pre> <p>Selain itu, saya juga tahu bahawa saya boleh mendapatkan <kod>bilangan suka</code> </p> <pre class="brush:php;toolbar:false;">const post = tunggu Post.findOne({ di mana: { id: postId }, atribut: ["id", "title", "imageUrl"], termasuk: [{ model: Pengguna, sebagai: "Penggemar", atribut: [[sequelize.fn("COUNT", "id"), "likersCount"]], }] }) // keputusan { "id": 36, "title": "ujian", "imageUrl": "하늘이_1644886996449.jpg", "Peminat": [ { "bilangan suka": 2 } ] }</pre> <p>Namun, saya tidak tahu bagaimana untuk mendapatkan kedua-duanya pada masa yang sama. Semak keputusan apabila saya menggunakan kedua-duanya. </p> <pre class="brush:php;toolbar:false;">{ model: Pengguna, sebagai: "Penggemar", atribut: ["id", [sequelize.fn("COUNT", "id"), "likersCount"]], melalui: { atribut: [] }, } // keputusan "Peminat": [ { "id": 13, "Like Count": 2 } ]</pre> <p>Ia hanya menunjukkan seorang liker (id: 13) Ia sepatutnya menunjukkan suka yang lain (id: 16). </p> <p>Apakah masalahnya? </p>
P粉792026467
P粉792026467

membalas semua(1)
P粉193307465

Ia hanya menunjukkan satu kerana COUNT ialah fungsi agregat yang mengumpulkan rekod untuk mengira. Jadi satu-satunya cara untuk mendapatkan kedua-duanya adalah dengan menggunakan subkueri, mengira bilangan rekod dalam jadual gabungan dan dapatkan rekod di bahagian lain perhubungan M:N pada masa yang sama.

const post = await Post.findOne({
  where: { id: postId },
  attributes: ["id", "title", "imageUrl", 
  // 你可能需要更正表和字段的名称
  [Sequelize.literal('(SELECT COUNT(*) FROM Likes where Likes.postId=Post.id)'), 'LikeCount']],
  include: [{
    model: User,
    as: "Likers",
    attributes: ["id"],
    through: { attributes: [] },
  }]
})
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan