【问题标题】:DQL - Selecting multiple fields, but fetching only one - hiding fields from resultsetDQL - 选择多个字段,但只获取一个 - 从结果集中隐藏字段
【发布时间】:2013-03-26 11:38:27
【问题描述】:

鉴于以下 DQL 查询:

SELECT
    p,
    (p.views * 0.1) + (p.likes * 0.9) as ratingPhoto
FROM
    AppBundle:Photo p
ORDER BY
    ratingPhoto DESC

我的结果集如下所示:

array (size=14)
  0 => 
    array (size=2)
      0 => object(Photo)
      'ratingPhoto' => string '1.42' (length=4)
  1 => 
    array (size=2)
      0 => object(Photo)
      'ratingPhoto' => string '1.31' (length=4)
...

是否有任何 DQL 功能以便我只检索 Photo 对象并从结果集中排除其他选定的字段?这是我期望的结果:

array (size=14)
  0 => object(Photo)
  1 => object(Photo)
...

【问题讨论】:

    标签: doctrine-orm dql


    【解决方案1】:

    您要查找的是 ORDER 子句和 HIDDEN 关键字中的计算值。

    通常,您必须执行以下操作:

    SELECT
        a,
        b,
        (SOME_COMPUTATION()) AS computed
    FROM
        ...
    ORDER BY
        computed ASC
    

    要从结果集中“隐藏”computed 值,从 Doctrine ORM 2.3 开始,您可以使用 HIDDEN 子句:

    SELECT
        a,
        b,
        (SOME_COMPUTATION()) AS HIDDEN computed
    FROM
        ...
    ORDER BY
        computed ASC
    

    这就是您的 DQL 的样子:

    SELECT 
        p,
        (p.views * 0.1) + (p.likes * 0.9) AS HIDDEN ratingPhoto
    FROM
        AppBundle:Photo p
    ORDER BY
        ratingPhoto DESC
    

    【讨论】:

    • @httpete 你真的应该考虑升级。 Doctrine 2.1 不再维护
    • 我一定会的!再次感谢,非常干净的答案
    【解决方案2】:

    您可以将 DQL 重写为:

    $dql = "SELECT p
    FROM AppBundle:Photo p
    ORDER BY ((p.views * 0.1) + (p.likes * 0.9)) DESC";
    

    【讨论】:

    猜你喜欢
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多