我很难发现为什么这个简单的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实体。但我不想加载超出我需要的数据。
答案 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