Doctrine查询生成器:FIND_IN_SET不起作用

问题描述 投票:0回答:1

我有一个带有Customer字段“ simple_array”的实体myNumbers,其值在我的数据库中例如为“ 12233,45454,99”。因此,我想搜索该实体,其中包含数字99。我使用查询构建器的nativeQuery进行了尝试,但始终收到一条错误消息,内容为":Customer not found in params array")

$this->entityManager()->createNativeQuery("SELECT c, FIND_IN_SET(c.myNumbers, :searchNumber) FROM MyBundle:Customer", new ResultSetMapping())->setParameter('searchNumber', $number)->getResult();

Alraedy尝试使用真实的表名“ Customer”:

 $this->entityManager()->createNativeQuery("SELECT c, FIND_IN_SET(c.myNumbers, :searchNumber) FROM Customer c", new ResultSetMapping())->setParameter('searchNumber', $number)->getResult();

然后错误是:

Column not foun: 1054 Unkown column "c" in field list 

有人可以帮我吗?

mysql doctrine-orm doctrine
1个回答
0
投票

在本机查询中,您的FROM子句必须指定表名而不是实体。照原样,当Doctrine偶然发现MyBundle:Customer时,它认为:Customer是一个已命名的参数,因此出现错误,因为此后您没有使用该名称设置任何参数。

只需将MyBundle:Customer替换为相应表的名称即可解决该问题。您可以使用$entityManager->getClassMetadata('MyBundle:Customer')->getTableName()来检索您实体的表名。


编辑:如果您在构建查询时遇到麻烦,则应该查看与本地查询有关的Doctrine文档。特别是关于ResultSetMappingBuilder的部分。正确选择所需字段的最简单方法是使用该工具为您生成select子句,然后正确映射结果集以随后将ResultSetMappingBuilder实体水化。

这里是为适应您的示例而修改的代码示例:

Customer
© www.soinside.com 2019 - 2024. All rights reserved.