当前位置: 首页 > 知识库问答 >
问题:

在Doctrine\ODM\MongoDB\DocumentRepository中创建原则查询

卢伟志
2023-03-14

我有一个Doctrine\ODM\MongoDB\DocumentRepository类型的对象,需要更改数据的获取方式,现在它使用$this-

在所有的例子中,我似乎都需要一个EntityManager来调用createQuery,但不知道如何从Doctrine\ODM\MongoDB\DocumentRepository实例中访问它。这个没有美元-

类定义似乎也缺少获取entitymanager的方法。

有一种方法可以创建queryBuilder($this-

$this-

有没有办法从Doctrine\ODM\MongoDB\DocumentRepository执行dql?

[更新]

这是因为我需要搜索一个不是日期的日期字段。它由3个字符串字段组成(年;4长度的字符串,月;2长度的字符串和天;2长度的字符串)。如果当前日期是星期一,则还需要搜索星期六和星期天。当前的错误代码使用findby查询,有时会产生如下结果:

$this->findBy(array(
        'data.type; => 6,
        'data.year' => '2014',
        'data.month' => '06',
        'data.day' => array( '$in' => ['02','01','0-1'])
//results in: where year=''2014' and month='06' and day in ('02','01','0-1')

我需要像这样的东西:

Where
  type = 6
  and (
    (year='2014' and month='06' and day='02')
    OR (year='2014' and month='06' and day='01')
    OR (year='2014' and month='05' and day='31')
  )

findby似乎没有提供可以让我做这样的查询的东西。


共有1个答案

叶翰林
2023-03-14

http://doctrine-mongodb-odm.readthedocs.org/en/latest/reference/query-builder-api.html

似乎您应该能够使用$this提供的查询生成器对象-

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

$results = $qb
    ->field('type')->equals(6) //add quotes i.e. '6' if type is string
    ->addOr(
        $qb->expr()
        ->field('year')->equals('2014')
        ->field('month')->equals('06')
        ->field('day')->in(array('01','02'))
    )
    ->addOr(
        $qb->expr()
        ->field('year')->equals('2014')
        ->field('month')->equals('05')
        ->field('day')->equals('31')
    )->getQuery()->execute();

 类似资料:
  • 我想知道在日期范围内的特定摩托车是否有合同。 我的架构如下所示: 我在mongo shell中有以下查询: mongo shell中的查询工作很好,但是日期是从-till动态生成的,我无法找到使用query Builder完成此操作的方法。 我的查询生成器: 生成odm的查询如下: 如何将日期动态添加到匹配中而不重复匹配? Thx帮你!!!

  • 我目前正在使用Symfony 4和Doctrine MongoDB捆绑包,遵循此链接中的说明:DoctrineMongoDBBundle。因此,我有一个用户文档: src/Document/UserDocument。php src/Repository/UserRepository。php src/Controller/Content。php 类内容扩展控制器 所以,在运行内容页面后,我得到了以下

  • 教条2是否内置了upsert功能?似乎没有,但我找不到一个明确的是或否的答案。 如果是,我当然会有兴趣看到一个示例和/或一些文档。

  • 我有一个mysql查询,它并不是很复杂,但我似乎不知道应该如何用Symfony编写它。 首先是查询: 我基本上是想看看t1是否是这些列中任何单词的一部分。假设是正在传递的变量。我不确定我是否应该在存储库中写这篇文章,如果应该,如何写。我正在寻找最佳实践方法。 谢谢

  • 有没有想过为什么使用Dociety的ODM会在同一个查询上返回零结果? 更新#1看起来教义\MongoDB\Query\Builder::near()L363有问题。方法参数忽略第二个值($Y)。因此只传递要执行的第一个值。

  • 我有一个mongodb文档,我已经把它变成了一个表单。该文档有两个emebedOne文档,它们也是表单。正在验证主文档,但未验证嵌入文档。我正在使用自定义断言,但我认为这不重要。 文档 嵌入式类对此的自定义断言永远不会调用。 形式 处理程序 谢谢你的帮助。 科里

  • 问题内容: 当我们必须使用 在Hibernate中,它们之间有什么区别? 问题答案: createQuery: http://docs.jboss.org/hibernate/core/3.6/reference/zh- CN/html/objectstate.html#objectstate- querying http://docs.jboss.org/hibernate/core/3.6/r

  • 我是全新的MongoDB,所以很抱歉,如果这个问题是基本的。 我试图获得一个使用Java basic对象(POJO)的基本CRUD,但这段代码失败了。(正确的方法是什么?我认为可能接近这个): 这是我得到的信息: