0

给定模型,其中有一个包含字符串数组的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? */ )
4

1 回答 1

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"%'
));
于 2014-09-01T01:45:05.973 回答