我有一个实体Customer
与simple_array字段processNumbers
。所以在DB中它保存为以逗号分隔的列表,例如:45645,78787,1111
。现在我想找到一个具有特定数字processNumber = 1111
的条目。我想用查询构建器来做这件事,但我只知道有数组时的方向,并且我搜索是否有数据库条目。这个方向不起作用,它表示没有条目,但它是:
$customer = $queryBuilder
->select('customer')
->from(Customer::class,'customer')
->where(":processNumber IN (customer.processNumbers)")
->setParameter('processNumber', $processNumber)
->getQuery()->getResult();
如果您使用的是Mysql,则可以在DoctrineExtension中使用Regex Expression
doctrine:
orm:
dql:
string_functions:
regexp: DoctrineExtensions\Query\Mysql\Regexp
然后使用正则表达式
$qb->andWhere('REGEXP(customer.processNumbers, :regexp) = true')
->setParameter('regexp', '(^1111,)|(,1111,)|(,1111$)|(^1111$)')
我的正则表达式非常基本但很明显(我希望)。你可以在这里看到正则表达式匹配:https://regex101.com/r/oNqpUf/1
您还可以执行以下操作:
$qb->andWhere("customer.processNumbers LIKE :key1 OR customer.processNumbers LIKE :key2 OR customer.processNumbers LIKE :key3 OR customer.processNumbers LIKE :key4");
$qb->setParameter("key", "1111");
$qb->setParameter("key2", "%,1111");
$qb->setParameter("key3", "1111,%");
$qb->setParameter("key4", "%,1111,%");