Tajuk ditulis semula sebagai: Gunakan Sequelize untuk mengira bilangan baris dalam jadual berkaitan
P粉792026467
2023-08-27 22:35:45
<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>
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.