我有和实体:公司,它有一列:类型。
Type可以是字符串,也可以是字符串数组。
例如:类型可以是" Foo"," Bar"或数组(" Foo"," Bar")。
我无法弄清楚如何获得该类型所包含的所有公司" Bar"。
我试过
$qb = $this->companyRepository()->createQueryBuilder("c");
$companies = $qb
->select("c")
->Where( $qb->expr()->in('c.type', array($qb->expr()->literal('Bar'))))
->getQuery()
->getResult();
仅获取类型为" Bar"的公司,而不是数组所在的公司(" Foo"," Bar")。
我尝试了$ qb-> expr() - >喜欢(...)而不是$ qb-> expr() - > in(..),结果相同。
如何获得包含类型的公司" Bar"? (假设类型不仅仅是我给出的3个值作为例子)
答案 0 :(得分:1)
正如我在评论中所写,当使用doctrines数组列时,您无法查询单个数组值。但由于这些列要求您不要在数组值中使用逗号,因此可以编写使用此要求的查询。
而不是正则表达式(需要doctrine extension),您还可以编写LIKE
查询,如下所示:
$query = 'Bar';
$qb = $this->companyRepository()->createQueryBuilder("c");
$companies = $qb
->where('c.type LIKE :only OR c.type LIKE :first OR c.type LIKE :last OR c.type LIKE :middle')
->setParameter('only', $query)
->setParameter('first', sprintf('%s%%,', $query))
->setParameter('last', sprintf('%%,%s', $query))
->setParameter('middle', sprintf('%%,%s,%%', $query))
->getQuery()
->getResult()
;
dump($companies);
答案 1 :(得分:0)
这是一个类似的问题,并为您解答。
Symfony2 Doctrine querybuilder where IN
但是,我建议使用DQL,如果它是一个选项,或者只使用Doctrine和PDO而不是QueryBuilder。