我有一个带有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
有人可以帮我吗?
在本机查询中,您的FROM
子句必须指定表名而不是实体。照原样,当Doctrine偶然发现MyBundle:Customer
时,它认为:Customer
是一个已命名的参数,因此出现错误,因为此后您没有使用该名称设置任何参数。
只需将MyBundle:Customer
替换为相应表的名称即可解决该问题。您可以使用$entityManager->getClassMetadata('MyBundle:Customer')->getTableName()
来检索您实体的表名。
编辑:如果您在构建查询时遇到麻烦,则应该查看与本地查询有关的Doctrine文档。特别是关于ResultSetMappingBuilder
的部分。正确选择所需字段的最简单方法是使用该工具为您生成select子句,然后正确映射结果集以随后将ResultSetMappingBuilder
实体水化。
这里是为适应您的示例而修改的代码示例:
Customer