如何使用Doctrine2和Symfony2创建原始MongoDB查询

时间:2012-06-14 04:47:52

标签: php mongodb symfony doctrine-orm

我正在尝试使用点表示法查询嵌入式文档 - 以下是一些示例:

http://www.mongodb.org/display/DOCS/Dot+Notation+(Reaching+into+Objects)

由于我挂了DQL / QueryBuilder API,我想通过Doctrine传递原始查询。我似乎无法在Symfony2的构造中弄清楚这一点。我能确定的唯一代码是:

$dm = $this->get('doctrine.odm.mongodb.document_manager');
$dm->getSchemaManager()->ensureIndexes();
$repo = $dm->getRepository('MyBundle:MyDocument');
$qb = $repo->createQueryBuilder();

// insert magic here

$query = $qb->getQuery();
$result = $query->execute();

以下是点符号的工作原理:

$dm = $this->get('doctrine.odm.mongodb.document_manager');
$dm->getSchemaManager()->ensureIndexes();
$repo = $dm->getRepository('MyBundle:MyDocument');
$qb = $repo->createQueryBuilder();

$qb
    ->field('embedded_document_field.field1')->equals(1)
    ->field('embedded_document_field.field2')->equals('foo')
;

$query = $qb->getQuery();
$result = $query->execute();

1 个答案:

答案 0 :(得分:0)

这个问题很古老,但如果有人遇到它,使用查询生成器执行此操作相当简单:

    $qb = $this->createQueryBuilder();
    $qb->addOr($qb->expr()->field('embedded.embedded2.username')->equals($username));
    $qb->addOr($qb->expr()->field('embedded.embedded3.username')->equals($username));
    $qb->addOr($qb->expr()->field('embedded.embedded4.username')->equals($username));
    $qb->field('status')->lt(10);
    $involved = $qb->getQuery()->execute();
    return $involved;

我承认这实际上并没有回答有关传递原始的问题(这是我自己的问题),但它确实解决了你的问题。