使用 doctrine 查询具有 php 数组的数组类型

Query an array type with php array using doctrine

我需要使用 doctrine 查询 mysql 数组类型和 php 数组。

我的数据库列是 dc2 类型数组,包含这样的值。

a:1:{i:0;s:3:"4wd";}

这是我的 querybuilder 查询,

$qb = $this->createQueryBuilder('c'); 
$qb->andWhere('c.equipment IN (:equipment)')
   ->setParameter('equipment', array('4wd'));
$qb->getQuery()->getResult();

但不幸的是这个查询returns只有空输出。如果有人能帮助解决这个问题就太好了。

要清楚 DC2 类型, 存在于 SQL 中。 DC2 是 doctrine 添加的注释,指定它是一个包含数组的 text 值。

因此,您应该 select 列并先获取它。 Doctrine 会处理它,然后给你一个数组,所以你可以用它做任何你想做的事。

可以 可能在文本字段中搜索 LIKE 并过滤,但这是不好的做法,制作一个设备实体并添加设备和您的实体之间的多对多关系。具有 ManyToMany 关系的 Where 子句很好地解释了

最后我用 REGEXP 找到了答案,但是对于 symfony 4 你需要 DoctrineExtensionsBundle

"beberlei/DoctrineExtensions": "0.3.x-dev",

在doctrine.yaml

doctrine:
    orm:
        dql:
            string_functions:
                regexp: DoctrineExtensions\Query\Mysql\Regexp

在仓库中

$equipment = implode("|", array('4wd', 'AbD'));
$qb->andWhere('REGEXP(c.equipment, :regexp) = true')
                    ->setParameter('regexp', $equipment);

这两个线程对答案和背景很有帮助。 MySQL LIKE IN()? And Regex with Doctrine 2 query builder?