【发布时间】:2014-07-31 08:18:11
【问题描述】:
我正在使用 QueryBuilder 通过 Doctrine2 执行复杂的查询。
我想拆分此查询以定义或不定义某些条件。
然后看起来像这样:
$logs = $em->getRepository("Shs\Entity\Log")
->createQueryBuilder("log")
->where("log.client = :client")
->setParameter("client", $client);
if($search != ""){
$logs->andWhere("log.name LIKE :search")
->setParameter("search", "%" . $search . "%");
}
$logs->addOrderBy("log.date", "DESC")
->getQuery()->execute();
但是这似乎不起作用。
如果我把它写在一个单独的块中,它会起作用:
$logs = $em->getRepository("Shs\Entity\Log")
->createQueryBuilder("log")
->where("log.client = :client")
->andWhere("log.name LIKE :search")
->setParameter("search", "%" . $search . "%")
->setParameter("client", $client)
->addOrderBy("log.date", "DESC")
->getQuery()->execute();;
如果我每次都重新定义 $logs 但我不明白为什么:
$logs = $em->getRepository("Shs\Entity\Log")
[...]
->setParameter("client", $client);
if($search != ""){
$logs = $logs->andWhere("log.name LIKE :search")
->setParameter("search", "%" . $search . "%");
}
$logs = $logs->addOrderBy("log.date", "DESC")
->getQuery()->execute();
在 QueryBuilder 类中,我看到 add 函数有一个参数 $append=false。 addOrderBy 函数(例如)调用 add 函数但将 $append 设置为 true :
public function addOrderBy($sort, $order = null)
{
return $this->add('orderBy', $sort . ' ' . (! $order ? 'ASC' : $order), true);
}
如果我强制 $append 为 false,它也可以,但我不会碰这个类。
实现我想做的最好的方法是什么?我应该使用 $qb->add() 而不是 $qb->where() 等,还是有办法使用 $qb->where() 来做到这一点?
非常感谢您的帮助!
【问题讨论】:
标签: zend-framework doctrine-orm