Doctrine在simple_array字段中找到Number

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

我有一个实体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();
php symfony doctrine-orm doctrine
2个回答
0
投票

如果您使用的是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


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,%");
© www.soinside.com 2019 - 2024. All rights reserved.