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 '.'
任何人都知道如何解决这个问题?
答案 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然后保持不变)。