MVC Complex查询和模型用法

时间:2012-03-09 14:03:45

标签: php model-view-controller design-patterns orm kohana

我有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;

2 个答案:

答案 0 :(得分:4)

没有严格的理由说你的模型绝对必须用表映射1对1。在这种情况下,最有意义的是提供专门针对热门用户的模型,特别是因为它依赖于连接来自多个相关表的数据。

然后,如果存在与Top Users相关的特定业务逻辑与标准User类无关,则可以将其保持分离和清洁。您可以随时提供TopUser的帮助/工厂方法,如果您需要向下钻取,则返回User,Campaign或Link的实例。

答案 1 :(得分:1)

我会说去顶级用户()。这个问题没有“正确”的答案,不是在技术背景下。但应该清楚地理解。因此,如果您想获得顶级用户,为什么要将这样的方法放在除用户之外的其他模型之一?想象一下获得代码的新团队成员:当您不在用户模型中时,您会在哪里寻找顶级用户?