2016-10-03 56 views
0

我试着做一个SELECT d.user AS user类型的查询。但这部分似乎不允许在教义中。Doctrine SELECT d.user AS user not allowed?

我试图得到一个不错的数组如下:

array(
    'week' => 39 
    'year' => 2016 
    'user' => UserObject{} 

我有以下DQL:

$qb = $this->createQueryBuilder('d') 
     ->select("d.user AS user, WEEK(d.date, 3) AS week, DATE_FORMAT(d.date, '%x') AS year") 
     ->join('d.user', 'u') 
     ->orderBy('d.date', 'ASC') 
     ->getQuery(); 

    return $qb->getResult(); 

当然,我可以做一个select("d, etc但是我想直接让用户作为返回数组中的一个键。

我与上面的代码得到的错误是: [Semantical Error] line 0, col 9 near 'user AS user,': Error: Invalid PathExpression. Must be a StateFieldPathExpression.

我已经加入加入,但似乎没有帮助。

+0

我认为你在错误的一面考虑问题。如果你想检索一个用户,你的查询不应该在用户实体上,并且你的查询不应该在另一个实体上加入你的条件?另一个主要原因是'user'是许多SGBD中的保留关键字(不知道您使用的是哪一个),您可能需要更改别名或将其放在'quotes之间。 – Boulzy

+0

@Boulzy,谢谢你的回复!我已经改变了别名,但这没有帮助。我带这个问题的原因是我*可以*做一个' - > select('d,...)'这样我也有用户。我只想直接选择用户,以便数据数组与我想要的一样。 – DelphiLynx

回答

1

我不确定它会给你完全你想要的结果(也许你将不得不尝试Doctrine\ORM\Query::HYDRATE_ARRAY hydrator),但可以这样做的伎俩?

$qb = $this->createQueryBuilder('d') 
      ->select("user, WEEK(d.date, 3) AS week, DATE_FORMAT(d.date, '%x') AS year") 
      ->leftJoin('d.user', 'user') 
      ->orderBy('d.date', 'ASC') 
      ->getQuery(); 

return $qb->getResult();