gpt4 book ai didi

symfony - 如何在 createQueryBuilder 中使用通配符?

转载 作者:行者123 更新时间:2023-12-01 07:08:02 25 4
gpt4 key购买 nike

在我的存储库类中,我使用:

public function getItemsByTag($tag)
{
$qb = $this->createQueryBuilder('c')
->select('c')
->where('c.tags LIKE %bipolar%')
->addOrderBy('c.id');

return $qb->getQuery()
->getResult();
}

但不幸的是,这行不通。有人知道这是如何工作的吗?还是我必须在没有 QueryBuilder 的情况下构建自定义查询?

谢谢!

最佳答案

基于单个参数搜索:

我认为它应该去:

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();
}

但我认为不鼓励将 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();

查看文档以获取更多信息,标题为 Helper Methods 的部分中有一个 like 表达式示例。

我还应该指出,我在每个示例中使用了不同的约定来将参数传递给查询,第一个使用命名参数 :tagsetParameter('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();

关于symfony - 如何在 createQueryBuilder 中使用通配符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8290041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com