symfony中的OR条件查找查询查询

时间:2014-04-09 09:59:20

标签: mongodb symfony

您好我无法在以下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类型。

谢谢你提前

1 个答案:

答案 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