3

:order関数に順序引数を渡すためにクエリ パラメータを使用しています。残念ながら、出力には影響がないようです。

リクエストのデバッグ出力は、order引数が正しく解析されたことを示しています。

Parameter #2(cf_sql_varchar) = posts.createdAt ASC

それでも、出力に違いはありません。引数 ( ORDER BY ..., #arguments.order#) をハードコーディングすると、正常に動作します。

何か案は?

public any function getPost(required numeric postId, string order)
{
    switch(arguments.order)
    {
        case "new":
            arguments.order = "posts.createdAt DESC";
            break;
        case "old": 
            arguments.order = "posts.createdAt ASC";
            break;
        default:
            arguments.order = "posts.score DESC";
    }

    local.post = new Query(dataSource=variables.wheels.class.connection.datasource);
    local.post.setSql("
        SELECT *
        FROM
        WHERE posts.id = :postId OR posts.parentId = :postId
        ORDER BY posts.postTypeId ASC, :order"
    );

    local.post.addParam(name="postId", cfsqltype="cf_sql_integer", value=arguments.postId, maxlength=10);
    local.post.addParam(name="order", cfsqltype="cf_sql_varchar", value=arguments.order, maxlength=20);
    local.post = local.post.execute().getResult();

    return local.post;

}

4

1 に答える 1

3

私の記憶が正しければ、queryparams は where 句以外では機能しません。したがって、バグではなく制限を扱っています。

于 2011-06-02T15:29:46.340 に答える