Maison  >  Questions et réponses  >  le corps du texte

Le titre est réécrit comme suit : Utilisez Sequelize pour compter le nombre de lignes dans les tables liées.

<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>
P粉792026467P粉792026467419 Il y a quelques jours368

répondre à tous(1)je répondrai

  • P粉193307465

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

    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.

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

    répondre
    0
  • Annulerrépondre