DQL - 合并实体中的自定义值

时间:2015-03-06 23:25:17

标签: symfony doctrine dql

Sooo,我的DQL查询有问题......

->createQuery(
    "SELECT cjr, cjr.microtimeEnd - cjr.microtimeStart AS duration
        FROM Application\Entity\CronJobResultEntity cjr"
)

这有效,但现在我得到一个数组作为响应,但我希望实体中的“持续时间”值(或者换句话说......成为该实体的一部分),这意味着它应该是这样的:

->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 '.'

任何人都知道如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

因此,您正在做的更多是SQL方法。要使其更像DQL,请在实体代码中添加“持续时间”和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)。

array_map(
    function($r){
        $r->setDuration($r->getMicroTimeEnd() - $r->getMicroTimeStart());
    }, &$result);

如果有意义,你也可以将其保存到数据库中(通过修改orm fiels然后保持不变)。