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



给定模型Post,其中包含字段tags,该字段包含字符串数组,例如:

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

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

我一直在想这些:

using Doctrine ODM QueryBuilder:

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

using Doctrine ORM QueryBuilder:

$qb->expr()->all( /* the docs say to use DQL here.. is there no QueryBuilder alternative? */ )

我被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"%'
));

相关内容

  • 没有找到相关文章

最新更新