Der Titel wird wie folgt umgeschrieben: Verwenden Sie Sequelize, um die Anzahl der Zeilen in zugehörigen Tabellen zu zählen
P粉792026467
P粉792026467 2023-08-27 22:35:45
0
1
369
<p>Mit sequelize und mySQL habe ich zwei Tabellen: <code>User</code> und <code>Post</code>. </p> <p>Die Beziehung zwischen den beiden Tabellen ist <code>M:N</code></p> <pre class="brush:php;toolbar:false;">db.User.belongsToMany(db.Post, { through: "Likes", as: "Liked" }); db.Post.belongsToMany(db.User, { through: „Likes“, as: „Likers“ });</pre> <p>Ich möchte alle Liker-IDs und die Anzahl der Liker des Beitrags erhalten. </p> <p>Ich weiß, dass man <code>alle Liker</code> erhalten kann. </p> <pre class="brush:php;toolbar:false;">const post = waiting Post.findOne({ wobei: { id: postId }, Attribute: ["id", "title", "imageUrl"], enthalten: [{ Modell: Benutzer, als: „Liker“, Attribute: ["id"], durch: { Attribute: [] }, }] }) // Ergebnis { "id": 36, „Titel“: „Test“, „imageUrl“: „하늘이_1644886996449.jpg“, „Gefällt mir“: [ { „id“: 13 }, { „id“: 16 } ] }</pre> <p>Außerdem weiß ich, dass ich auf diese Weise die <code>Anzahl der Likes</code> erhalten kann. </p> <pre class="brush:php;toolbar:false;">const post = waiting Post.findOne({ wobei: { id: postId }, Attribute: ["id", "title", "imageUrl"], enthalten: [{ Modell: Benutzer, als: „Liker“, Attribute: [[sequelize.fn("COUNT", "id"), "likersCount"]], }] }) // Ergebnis { "id": 36, „Titel“: „Test“, „imageUrl“: „하늘이_1644886996449.jpg“, „Gefällt mir“: [ { „likersCount“: 2 } ] }</pre> <p>Allerdings weiß ich nicht, wie ich beide gleichzeitig bekommen kann. Überprüfen Sie die Ergebnisse, wenn ich beide verwende. </p> <pre class="brush:php;toolbar:false;">{ Modell: Benutzer, als: „Liker“, Attribute: ["id", [sequelize.fn("COUNT", "id"), "likersCount"]], durch: { Attribute: [] }, } // Ergebnis „Gefällt mir“: [ { "id": 13, „likersCount“: 2 } ]</pre> <p>Es wird nur ein Liker angezeigt (ID: 13) Es sollte ein weiterer Liker angezeigt werden (ID: 16). </p> <p>Was ist das Problem? </p>
P粉792026467
P粉792026467

Antworte allen(1)
P粉193307465

它只显示一个,因为COUNT是一个聚合函数,它将记录分组以进行计数。所以要同时获取两者的唯一方法是使用子查询,在连接表中计算记录的数量,同时获取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: [] },
  }]
})
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!