Rumah  >  Soal Jawab  >  teks badan

Tajuk ditulis semula sebagai: Gunakan Sequelize untuk mengira bilangan baris dalam jadual berkaitan

<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粉792026467P粉792026467419 hari yang lalu372

membalas semua(1)saya akan balas

  • P粉193307465

    P粉1933074652023-08-28 11:56:53

    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: [] },
      }]
    })
    

    balas
    0
  • Batalbalas