给定模型 Post 它有一个字段 tags 它保存字符串数组,例如:
Post
tags
Post: id: 1 tags: ['a', 'b', 'c'] Post: id: 2 tags: ['a', 'z']
如何构造查询,以获取包含数组中所有值的模型 ['a', 'b'] (在本例中,仅返回Post id 1)?
['a', 'b']
我一直在想这些:
使用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? */ )
我被 array 类型映射名称。如果您仔细阅读文档,就会发现没有这样的数据库类型 大堆 .
array
大堆
那么是什么类型 大堆 映射到?anwser是 text 这意味着你可以 LIKE 对它的操作(尽管,这些操作可能会导致一些性能影响)。
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"%' ));