Symfony DQL-在实体内合并自定义值

Symfony DQL-在实体内合并自定义值,symfony,doctrine,dql,Symfony,Doctrine,Dql,Sooo,我对DQL查询有问题 ->createQuery( "SELECT cjr, cjr.microtimeEnd - cjr.microtimeStart AS duration FROM Application\Entity\CronJobResultEntity cjr" ) 这是可行的,但现在我得到一个数组作为响应,但我希望实体中的“duration”值(或者换句话说……是该实体的一部分),这意味着它应该是这样的: ->createQuery(

Sooo,我对DQL查询有问题

->createQuery(
    "SELECT cjr, cjr.microtimeEnd - cjr.microtimeStart AS duration
        FROM Application\Entity\CronJobResultEntity cjr"
)
这是可行的,但现在我得到一个数组作为响应,但我希望实体中的“duration”值(或者换句话说……是该实体的一部分),这意味着它应该是这样的:

->createQuery(
    "SELECT cjr, cjr.microtimeEnd - cjr.microtimeStart AS cjr.duration
        FROM Application\Entity\CronJobResultEntity cjr"
)
但这带来了一个例外:

QueryException in QueryException.php line 52:
[Syntax Error] line 0, col 56: Error: Expected Doctrine\ORM\Query\Lexer::T_FROM, got '.'

有人知道如何解决这个问题吗?

所以,您所做的更多的是SQL方法。要使其更像DQL,请在实体代码中添加“duration”以及getter和setter:

/**
 * @var string
 */
private $duration;

/**
 * Get duration
 *
 * @return
 */

public function getDuration() {
     return $this->duration;
}

/**
 * Set duration
 *
 * @param
 * @return $this
 */
public function setDuration($duration) {
    $this->duration = $duration;
    return $this;
}
使用您的第一个查询

->createQuery(
    "SELECT cjr, cjr.microtimeEnd - cjr.microtimeStart AS duration
        FROM Application\Entity\CronJobResultEntity cjr"
);
然后得到结果

$result = $query->getResult();
最后,翻阅它们以设置数据(如果对您更有意义,您也可以使用foreach)


如果有意义,您还可以将其持久化到数据库中(通过修改orm fiels,然后持久化)。

实体中是否有持续时间字段?否,如上面的示例所示,它是“动态”计算的。编辑:还尝试将字段添加到实体中。没有帮助。您有权更改数据库结构或原始实体代码吗?是的,我有权访问booth。谢谢。是的,我也教过这个选项,但我需要DQL方法,因为我使用knp排序组件,它只接受一个查询(除此之外,我还希望代码尽可能少:),您可能需要为此编写一个自定义的查询器。或者将duration字段作为数据库表的一部分添加。因此,是否确实不可能通过DQL直接合并/设置自定义值(到现有实体)?
array_map(
    function($r){
        $r->setDuration($r->getMicroTimeEnd() - $r->getMicroTimeStart());
    }, &$result);