0

(我尝试将其发布到 CFWheels Google 群组(两次),但由于某种原因,我的消息从未出现。该列表是否经过审核?)

这是我的问题:我正在 CF on Wheels 中开发一款社交网络应用程序,与我们在 Chris Peters 的精彩教程中所熟悉的应用程序并无太大区别。不过,在我的情况下,我需要在用户目录中显示最新的状态消息。我有一个带有 hasMany("statuses") 的 User 模型和一个带有 belongsTo("user") 的 Status 模型。所以这是我开始的代码:

users = model("user").findAll(include="userprofile, statuses");

这当然会为状态表中的每个状态消息返回一条记录。大量的矫枉过正。所以接下来我尝试:

users = model("user").findAll(include="userprofile, statuses", group="users.id");

越来越近了,但现在我们正在获取每个用户的第一个状态记录(最低的 status.id),当我想选择最近的状态时。我认为在直接 SQL 中,我会先使用子查询对状态进行重新排序,但这在 Wheels ORM 中对我不可用。那么是否有另一种干净的方法来实现这一点,或者我是否必须将一个巨大的查询结果或状态对象拖入我的 CFML,然后在循环时将它们过滤掉?

4

2 回答 2

1

您可以使用计算属性获取最新状态:

// models/User.cfc
function init() {
    property(
        name="mostRecentStatusMessage",
        sql="SELECT message FROM statuses WHERE userid = users.id ORDER BY createdat DESC LIMIT 1,1"
    );
}

当然,SELECT语句的语法将取决于您的 RDBMS,但这应该可以帮助您入门。

缺点是您需要为查询中需要的每一列创建一个计算属性。

<cfquery>另一种选择是在模型中创建一个方法并在标签中编写自定义 SQL 。这种方式也是完全有效的。

于 2012-07-05T14:33:05.423 回答
0

我不知道您确切的数据库架构,但您的 findAll() 不应该看起来更像这样的东西:

statuses = model("status").findAll(include="userprofile(user)", where="userid = users.id");

这应该从特定用户那里获得所有状态......或者是所有用户都需要它?我发现你的问题有点难以解决。你到底想要得到什么?

于 2012-08-04T00:41:52.467 回答