DQL上的StateFieldPathExpression错误

时间:2015-04-17 17:17:50

标签: symfony doctrine dql

我很难发现为什么这个简单的Doctrine的DQL正在生成"错误:无效的PathExpression。必须是StateFieldPathExpression"错误:

SELECT a.state
  FROM MyBundle:Alocation a JOIN a.state JOIN a.client
 WHERE a.client = :client

我有3个实体:State(id,name),Client(id,name)和Alocation(id,state,client)。我所得到的是在特定客户的位置中出现的状态。我在我的系统中得到了几十个简单的DQLS。这个DQL的问题是什么?

我在SO和其他地方看过我的问题,但大多数人使用createQueryBuilder()而我使用的是DQL。我发现使用DQL的问题似乎并不适用于我的案例。

修改

无论如何我尝试使用createQueryBuilder():

$this->doctrine->getManager()
->createQueryBuilder()
->add('select', 'a.state')
->add('from', 'MyBundle:Alocation a')
->innerJoin('a.state', 'st')
->innerJoin('a.client', 'c', 'WITH', 'a.client = :client')
->setParameter("client", $client)
->getQuery()

同样的错误。

EDIT2:

我尝试使用partial来解决它,就像这样:

SELECT PARTIAL a.{state}
  FROM MyBundle:Alocation a JOIN a.state JOIN a.client
 WHERE a.client = :client

但它没有用。得到错误:"预期结束字符串,得到' a' &#34 ;.我也尝试使用WITH而不是WHERE.Same的东西。

编辑3:我尝试做的只是获取国家/地区实体。我可以解决它加载所有Alocation实体。但我不想加载超出我需要的数据。

1 个答案:

答案 0 :(得分:1)

如果您的州字段包含少量字段编号,则可以使用此查询:

SELECT s.name, s.id, s.value
  FROM MyBundle:Alocation a JOIN a.state s JOIN a.client c
 WHERE c.id = :client