Mik*_*ike 3 query-builder symfony doctrine-orm
在我的存储库类中,我使用:
public function getItemsByTag($tag)
{
$qb = $this->createQueryBuilder('c')
->select('c')
->where('c.tags LIKE %bipolar%')
->addOrderBy('c.id');
return $qb->getQuery()
->getResult();
}
Run Code Online (Sandbox Code Playgroud)
但不幸的是,这不起作用..有谁知道这是如何工作的?或者我是否必须在没有QueryBuilder的情况下构建自定义查询?
谢谢!
Kas*_*een 13
基于单个参数搜索:
我认为它应该去:
public function getItemsByTag($tag)
{
$qb = $this->createQueryBuilder('c')
->select('c')
->where('c.tags LIKE :tag')
->addOrderBy('c.id')
->setParameter('tag', $tag);
return $qb->getQuery()->getResult();
}
Run Code Online (Sandbox Code Playgroud)
但我认为不建议使用LIKE作为使用查询构建器的一部分,因此您应该这样做:
$qb = $this->createQueryBuilder('c');
$qb->select('c')
->where($qb->expr()->like('c.tags', '?1'))
->addOrderBy('c.id')
->setParameter(1, $tag);
return $qb->getQuery()->getResult();
Run Code Online (Sandbox Code Playgroud)
查看文档以获取更多信息,在标题为帮助方法的部分中有一个类似表达式的示例
我还应该指出,我在每个示例中使用了不同的约定来将参数传递给查询,第一个使用的:tag是由setParameter('tag', $value)第二个设置的命名参数只是一个编号参数?1,您可以轻松地使用命名第二个例子中的参数如果你也希望如此.
使用一系列参数进行搜索:
你还问过做一系列的喜欢.这里是一个OR表达式,但如果你想搜索所有标签,你可以将它改为AND.
为了制作一个"LIKE数组",你只需要自己构建表达式.
$qb = $this->createQueryBuilder('c');
$orExpr = $qb->expr()->orX();
for ($i = 0; $i < count($tags); $i++) {
$orExpr->add($qb->expr->like('c.tags', "?$i"));
// You may have to set params later in a loop after $orExpr has been
// added to the queryBuilder.
$qb->setParameter($i, $tags[$i]);
}
$qb->select('c')->where($orExpr)->addOrderBy('c.id');
return $qb->getQuery()->getResult();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9333 次 |
| 最近记录: |