您好我无法在以下Symfony findBy查询中使用OR condation。
$searchArrayTasks = array(
"name" => new \MongoRegex('/.*'.trim($_POST['keyword']).'.*/')
);
$documents = $dm->getRepository('WorkOrganisationBundle:Tasks')->findBy($searchArrayTasks)->sort($sortArray )->limit($limit)->skip($skip);
任何人都可以建议如何在此查询中使用OR condation。因为我想根据不同的参数进行搜索,如名称或类OR类型。
谢谢你提前
答案 0 :(得分:0)
这种方式(肯定在你的经理中)是一种不好的做法。
它的目的是要求非常愚蠢。
2件事:
- 将您的代码放入存储库
- 在sql或dql中编写查询代码:
public function common($qb, $limit)
{
$qb->setMaxResults($limit)
->orderBy('task.id', 'DESC');
return $qb;
}
public function findByNameClassOrType($keyword, $limit)
{
$qb = $this->createQueryBuilder('task');
$qb->select('task')
->where('task.name LIKE ?', '%'.$keyword.'%')
->orWhere('task.class LIKE ?', '%'.$keyword.'%')
->orWhere('task.type LIKE ?', '%'.$keyword.'%');
$qb = $this->common($qb, $limit);
return $qb->getQuery()->getResult();
}
使用?
符号确保Doctrine逃脱你的字符串。
编辑(mongodb):使用Mongo使用addOr($ expr)
$q = $doctrineOdm->createQueryBuilder('Work\OrganisationBundle\Document\Tasks');
$q->addOr($q->expr()->field('task.name')->equals($keyword));
$q->addOr($q->expr()->field('task.type')->equals($keyword));
$result = $q->getQuery()->execute();
有关更多信息,请参阅https://doctrine-mongodb-odm.readthedocs.org/en/latest/reference/query-builder-api.html