Le titre est réécrit comme suit : Utilisez Sequelize pour compter le nombre de lignes dans les tables liées.
P粉792026467
2023-08-27 22:35:45
<p>En utilisant sequelize et MySQL, j'ai deux tables : <code>User</code> et <code>Post</code>. </p>
<p>La relation entre les deux tables est <code>M:N</code></p>
<pre class="brush:php;toolbar:false;">db.User.belongsToMany(db.Post, { through: "J'aime", as: "J'aime" });
db.Post.belongsToMany(db.User, { through : "Likes", as : "Likers" });</pre>
<p>Ce que je veux, c'est obtenir tous les identifiants des likes et le nombre de likes de la publication. </p>
<p>Je sais que vous pouvez obtenir <code>tous les likes</code> </p>
<pre class="brush:php;toolbar:false;">const post = wait Post.findOne({
où : { id : postId },
attributs : ["id", "title", "imageUrl"],
inclure: [{
modèle: Utilisateur,
comme : "Likers",
attributs : ["id"],
à travers : { attributs : [] },
}]
})
// résultat
{
"identifiant": 36,
"titre": "test",
"imageUrl": "하늘이_1644886996449.jpg",
"J'aime": [
{
"identifiant": 13
},
{
"identifiant": 16
}
]
}</pré>
<p>De plus, je sais aussi que je peux obtenir le <code>nombre de likes</code> </p>
<pre class="brush:php;toolbar:false;">const post = wait Post.findOne({
où : { id : postId },
attributs : ["id", "title", "imageUrl"],
inclure: [{
modèle: Utilisateur,
comme : "Likers",
attributs : [[sequelize.fn("COUNT", "id"), "likersCount"]],
}]
})
// résultat
{
"identifiant": 36,
"titre": "test",
"imageUrl": "하늘이_1644886996449.jpg",
"J'aime": [
{
"likersCount": 2
}
]
}</pré>
<p>Cependant, je ne sais pas comment obtenir les deux en même temps.
Vérifiez les résultats lorsque je les utilise tous les deux. </p>
<pre class="brush:php;toolbar:false;">{
modèle: Utilisateur,
comme : "Likers",
attributs : ["id", [sequelize.fn("COUNT", "id"), "likersCount"]],
à travers : { attributs : [] },
}
// résultat
"J'aime": [
{
"identifiant": 13,
"likersCount": 2
}
]≪/pré>
<p>Il ne montre qu'un seul like (id : 13)
Il devrait montrer un autre like (id : 16). </p>
<p>Quel est le problème ? </p>
Il n'en affiche qu'un car
COUNT
est une fonction d'agrégation qui regroupe les enregistrements pour les compter. Ainsi, la seule façon d'obtenir les deux est d'utiliser une sous-requête, de compter le nombre d'enregistrements dans la table de jointure et d'obtenir simultanément les enregistrements de l'autre côté de la relation M:N.