(我尝试将其发布到CFWheels Google Group(两次),但出于某种原因,我的消息从未出现。该列表是否已审核?)
这是我的问题:我正在使用车轮上的CF社交网络应用程序,与我们在Chris Peters的精彩教程中所熟悉的应用程序完全不同。但是,在我的网站中,我需要在用户目录中显示最新的状态消息。我有一个带有hasMany(“状态”)的用户模型和一个带有belongsTo(“用户”)的状态模型。所以这是我开始使用的代码:
users = model("user").findAll(include="userprofile, statuses");
这当然会为状态表中的每条状态消息返回一条记录。大规模的矫枉过正。接下来我尝试:
users = model("user").findAll(include="userprofile, statuses", group="users.id");
越来越近了,但现在我们要为每个用户获取第一个状态记录(最低status.id),当我想选择最新状态时。我认为在直接SQL中我会首先使用子查询来重新排序状态,但在车轮ORM中我无法使用。那么有没有另一种干净的方法来实现这一点,或者我是否必须拖动一个巨大的查询结果或将状态对象转换为我的CFML,然后在循环时过滤它们?
答案 0 :(得分:1)
您可以使用calculated property
获取最新状态// 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。这种方式也完全有效。
答案 1 :(得分:0)
我不知道你确切的数据库架构,但是你的findAll()看起来不应该像这样:
statuses = model("status").findAll(include="userprofile(user)", where="userid = users.id");
那应该从特定用户那里得到所有状态......还是所有用户都需要它?我发现你的问题有点棘手。你到底想要归还的是什么?