我有3张桌子。
他们有一对多的关系。用户有很多广告系列。 Campaign有很多链接。
我通过计算每个用户拥有的链接总数来计算最高用户数。所以我加入3个表并按用户分组并选择用户和总和(链接)。
此查询涉及3个表。我已经为每个表格提供了3个模型类。现在我的问题是我应该在哪个模型中放置此查询?它应该进入用户模型(因为我称之为 top10users ?或者还有其他方法可以通过利用已有的3个模型来获取此信息。我想知道从MVC的角度来看哪个是最合适的。
查询:
SELECT u.id,
u.name,
SUM(l.num_visited) total_num_visited
FROM users u
JOIN campaigns c
ON ( u.id = c.user_id )
JOIN links l
ON ( c.id = l.campaign_id )
GROUP BY u.id
ORDER BY total_num_visited DESC
LIMIT 10;
答案 0 :(得分:4)
没有严格的理由说你的模型绝对必须用表映射1对1。在这种情况下,最有意义的是提供专门针对热门用户的模型,特别是因为它依赖于连接来自多个相关表的数据。
然后,如果存在与Top Users相关的特定业务逻辑与标准User类无关,则可以将其保持分离和清洁。您可以随时提供TopUser的帮助/工厂方法,如果您需要向下钻取,则返回User,Campaign或Link的实例。
答案 1 :(得分:1)
我会说去顶级用户()。这个问题没有“正确”的答案,不是在技术背景下。但应该清楚地理解。因此,如果您想获得顶级用户,为什么要将这样的方法放在除用户之外的其他模型之一?想象一下获得代码的新团队成员:当您不在用户模型中时,您会在哪里寻找顶级用户?