【问题标题】:Query an array type with php array using doctrine使用教义用php数组查询数组类型
【发布时间】:2018-12-17 12:32:46
【问题描述】:

我需要使用教义查询带有php数组的mysql数组类型。

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

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

这是我的查询构建器查询,

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

但不幸的是,这个查询只返回空输出。如果有人可以帮助解决这个问题,那就太好了。

【问题讨论】:

    标签: php doctrine symfony4


    【解决方案1】:

    要明确 DC2 类型,SQL 中确实 存在。 DC2 是由教义添加的注释,指定它是一个包含数组的文本值。

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

    可以使用 LIKE 在文本字段中搜索并过滤,但这是不好的做法,请创建一个 Equipment 实体并在 Equipment 和您的实体之间添加多对多关系.具有多对多关系的 Where 子句很好地解释了 here

    【讨论】:

    • 有没有办法在这种情况下使用like?
    • 没有尝试 LIKE 与 DC2 字段,但也许。但是,正如我所说,你不应该这样做。
    • 我用正则表达式找到了答案。但是非常感谢您的解释和回复
    【解决方案2】:

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

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

    在教义.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()?Regex with Doctrine 2 query builder?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-04
      • 1970-01-01
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多