我有一个带有simple_array字段Customer
的实体processNumbers
。所以在数据库中它保存为逗号分隔列表,例如:45645,78787,1111
。
现在我想找到一个具有特定数字processNumber = 1111
的条目。
我想用查询构建器来做这件事,但我只知道有数组时的方向,并且我搜索是否有数据库条目。这个方向不起作用,它说没有条目,但它是:
$customer = $queryBuilder
->select('customer')
->from(Customer::class,'customer')
->where(":processNumber IN (customer.processNumbers)")
->setParameter('processNumber', $processNumber)
->getQuery()->getResult();
答案 0 :(得分:0)
如果您使用的是Mysql,则可以使用DoctrineExtension
中的Regex Expressiondoctrine:
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
答案 1 :(得分:0)
您还可以执行以下操作:
$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,%");