【问题标题】:How to query for models containing all given values in an array field? [Doctrine ORM and ODM QueryBuilder]如何查询包含数组字段中所有给定值的模型? [学说 ORM 和 ODM QueryBuilder]
【发布时间】:2014-09-28 00:22:51
【问题描述】:

给定模型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? */ )

【问题讨论】:

    标签: orm doctrine-orm query-builder odm


    【解决方案1】:

    我被array 类型映射名称误导了。如果你仔细阅读文档,你会发现没有 array 这样的数据库类型。

    那么array 映射到什么类型?答案是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"%'
    ));
    

    【讨论】:

      猜你喜欢
      • 2016-12-21
      • 2016-08-25
      • 1970-01-01
      • 2021-01-28
      • 2013-08-29
      • 1970-01-01
      • 1970-01-01
      • 2014-08-05
      • 2021-02-10
      相关资源
      最近更新 更多