DQL - 选择多个字段,但仅提取一个 - 隐藏结果集中的字段

htt*_*ete 4 dql doctrine-orm

给出以下DQL查询:

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

我的结果集如下所示:

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)
...
Run Code Online (Sandbox Code Playgroud)

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

array (size=14)
  0 => object(Photo)
  1 => object(Photo)
...
Run Code Online (Sandbox Code Playgroud)

Ocr*_*ius 6

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

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

SELECT
    a,
    b,
    (SOME_COMPUTATION()) AS computed
FROM
    ...
ORDER BY
    computed ASC
Run Code Online (Sandbox Code Playgroud)

要从computed结果集"隐藏" 值,自Doctrine ORM 2.3起,您可以使用以下HIDDEN子句:

SELECT
    a,
    b,
    (SOME_COMPUTATION()) AS HIDDEN computed
FROM
    ...
ORDER BY
    computed ASC
Run Code Online (Sandbox Code Playgroud)

这就是你的DQL的样子:

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