Doctrine在simple_array字段中找到Number

时间:2018-02-05 07:19:00

标签: php symfony doctrine-orm doctrine

我有一个带有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();

2 个答案:

答案 0 :(得分: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

答案 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,%");