代码之家  ›  专栏  ›  技术社区  ›  ioleo

如何查询包含数组字段中所有给定值的模型?[条令ORM和ODM QueryBuilder]

  •  0
  • ioleo  · 技术社区  · 10 年前

    给定模型 Post 它有一个字段 tags 它保存字符串数组,例如:

    Post:
      id: 1
      tags: ['a', 'b', 'c']
    
    Post:
      id: 2
      tags: ['a', 'z']
    

    如何构造查询,以获取包含数组中所有值的模型 ['a', 'b'] (在本例中,仅返回Post id 1)?

    我一直在想这些:

    使用Doctrine ODM QueryBuilder:

    // is this correct?
    $qb->expr()->field('tags')->all( array('a', 'b') );
    

    使用Doctrine ORM QueryBuilder:

    $qb->expr()->all( /* the docs say to use DQL here.. is there no QueryBuilder alternative? */ )
    
    1 回复  |  直到 10 年前
        1
  •  1
  •   ioleo    10 年前

    我被 array 类型映射名称。如果您仔细阅读文档,就会发现没有这样的数据库类型 大堆 .

    那么是什么类型 大堆 映射到?anwser是 text 这意味着你可以 LIKE 对它的操作(尽管,这些操作可能会导致一些性能影响)。

    因此,为了回答我自己的问题,为了实现这一目标,我必须构建如下内容:

    $qb->where($qb->expr()->andX(
        $qb->expr()->like('tags', '?1'),
        $qb->expr()->like('tags', '?2'),
        $qb->expr()->like('tags', '?3')
    ))->setParameters(array(
        1 => '%"a"%',
        2 => '%"b"%',
        3 => '%"c"%'
    ));