Doctrine Symfony2/使用andwhere()的条令查询生成器

Doctrine Symfony2/使用andwhere()的条令查询生成器,doctrine,symfony,Doctrine,Symfony,我在repository类中使用以下方法查找数据库中的某些标记: public function getItemsByTag($tag, $limit = null) { $tag = '%'.$tag.'%'; $qb = $this->createQueryBuilder('c'); $qb->select('c') ->where($qb->expr()->like('c.tags', '?1')) -&

我在repository类中使用以下方法查找数据库中的某些标记:

public function getItemsByTag($tag, $limit = null)
{
    $tag = '%'.$tag.'%';

    $qb = $this->createQueryBuilder('c');

    $qb->select('c')
       ->where($qb->expr()->like('c.tags', '?1'))
       ->setParameter(1, $tag)
       ->addOrderBy('c.clicks', 'DESC');

    if (false === is_null($limit))
        $qb->setMaxResults($limit);

    return $qb->getQuery()->getResult();
}
这个很好用。。但是:如何添加2个附加变量(其中:review=1,enabled=1)?我试过andwhere(),但我想不出来

我还发现类似这样的事情:

public function getItems($limit = null)
{
        $qb = $this->createQueryBuilder('b')
               ->select('b')
               ->add('where', 'b.reviewed = 1')
               ->add('where', 'b.enabled = 1')
               ->addOrderBy('b.name', 'ASC');

        // ...
}
也不行

有什么提示吗?

从中,建议的方式如下:

$qb->select(array('c'))
   ->where($qb->expr()->orx(
       $qb->expr()->eq('c.reviewed', 1),
       $qb->expr()->eq('c.enabled', 1),
       $qb->expr()->like('c.tags', '?1')
   ))
   ->orderBy('c.clicks', 'DESC'));

我会这样写:

public function getItems($limit = null)
{
        $qb = $this->createQueryBuilder('b')
               ->select('b')
               ->add('where', 'b.reviewed = 1')
               ->add('where', 'b.enabled = 1')
               ->addOrderBy('b.name', 'ASC');

        // ...
}
$qb=$this
->createQueryBuilder('c')
->其中('c.tags LIKE:tag')
->andWhere('c.REVIDED=1')
->andWhere('c.enabled=1')
->setParameter('tag',“%{$tag}%”)
->orderBy('c.clicks','DESC')
->addOrderBy('b.name','ASC');
如果($限额){
$qb->setMaxResults($limit);
}
返回$qb->getQuery()->getResult();
您还可以将以下条件结合起来:

->其中('c.tags LIKE:tag和c.revieved=1和c.enabled=1')

好的,也谢谢xdazz+1!我相信addOrderBy的用途是将逻辑连接到orderBy。例如,如果需要2个orderBy参数,第一个参数将是“orderBy”,然后是“addOrderBy”。与where子句的作用相同。第一个是->where,然后所有下面的内容都写为'->addWhere'。谢谢,节省了我一些时间。