0

(これを CFWheels Google グループに投稿してみました (2 回) が、何らかの理由でメッセージが表示されません。そのリストはモデレートされていますか?)

これが私の問題です。私は CF on Wheels でソーシャル ネットワーキング アプリに取り組んでいます。これは、Chris Peters の素晴らしいチュートリアルで私たちがよく知っているものとあまり似ていません。ただし、私の場合は、ユーザー ディレクトリにある最新のステータス メッセージを表示する必要があります。私は hasMany("statuses") を持つ User モデルと belongsTo("user") を持つ Status モデルを持っています。だからここに私が始めたコードがあります:

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

もちろん、これは statuses テーブル内のすべてのステータス メッセージに対して 1 つのレコードを返します。大量のオーバーキル。次に、次のことを試します。

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

近づいていますが、最新のステータスを選択したいときに、各ユーザーの最初のステータス レコード (最も低い status.id) を取得しています。ストレート SQL では、最初にサブクエリを使用してステータスを並べ替えると思いますが、Wh​​eels 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 によって異なりますが、それで作業を開始できます。

欠点は、クエリで使用する必要がある列ごとに計算プロパティを作成する必要があることです。

もう 1 つのオプションは、モデルにメソッドを作成し、<cfquery>タグにカスタム SQL を記述することです。その方法も完全に有効です。

于 2012-07-05T14:33:05.423 に答える
0

正確なDBスキーマはわかりませんが、findAll()を次のように表示するべきではありません。

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

特定のユーザーからすべてのステータスを取得する必要があります...それとも、すべてのユーザーに必要ですか?私はあなたの質問を解決するのが少し難しいと思っています。あなたが正確に返還しようとしているのは何ですか?

于 2012-08-04T00:41:52.467 に答える