问题标签 [doctrine-query]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
656 浏览

doctrine-orm - 学说2:不同的查询方式,不同的结果

有人可以解释一下,为什么我会得到不同的结果?

只有 $result1 持有 $user,这是我所期望的,其他都是空的。怎么了?(请不要说我需要调用 $em->flush(); )

0 投票
1 回答
34 浏览

mysql - 返回关系的整个列表匹配的所有行(而不是任何组合)

具有以下简单的表结构:

如果我有一个标签 ID 列表,我将如何获取每一行数据,其中列表中的每一行标签都与匹配的数据行相关,而不是其子集?

这是我现在不起作用的查询:

具体来说:这个不起作用,因为它将返回与标签 1 或 2 相关的任何数据行。不是 12。

0 投票
2 回答
399 浏览

mysql - 如何使用 DQL 执行关系除法?

当尝试使用 Doctrine 1.2 执行关系除法时,我收到一个“重复别名”错误,看起来像是在下面的查询中找到的 DISTINCT:

如果我从查询中删除DISTINCT,它会运行但不会得到我想要的。有没有合适的方法让 Doctrine 解决这个问题?

具体代码:

0 投票
1 回答
373 浏览

symfony - 如何创建一个从关系中获取实体列表的 Symfony2 实体字段?

我有 3 个实体:公司、部门和用户用户与公司有一对多的关系。部门与公司和用户有分离的多对一关系

目标是让每个部门配置不同的部门,并且用户能够(在他们的个人资料中)从属于他们公司的部门中进行选择。

我正在尝试使用内置实体字段类型来完成此操作。我的问题是,当 Symfony 呈现该字段时,用户可以选择任何部门,而不仅仅是属于该用户公司的部门。

我尝试使用自定义查询,但我收到 $company 不存在的错误(即使我的函数中有它)。我认为这是因为自定义查询在一个闭包中,它有自己的范围。

0 投票
1 回答
2487 浏览

symfony - 具有相关实体字段的 where 子句的 Doctrine 查询构建器

我有两个实体:ImageTags,具有多对多关系。

Image有一些字段:code, description,authortags实现了多对多关系。

Tag只有两个字段:nameimages.

我正在构建一个非常通用的搜索表单,只有一个输入字段,您可以在其中编写任何文本,然后将返回Image在其或字段或其任何标签字段中包含该文本的任何内容。codedescriptionauthorname

对于非关系字段,这很容易。我在我的控制器中有(query只是用于搜索的 de GET 参数):

现在,我不知道如何name处理tags.

我曾尝试在将Image所有标签作为字符串返回的实体中使用虚拟字段,但稍后我无法在查询生成器中使用它。

非常感谢!

0 投票
1 回答
760 浏览

mongodb-php - Doctrine ODM: 不能素数->(true) getSingleResult(); 引发光标错误

我有一个文档,该文档具有另一个文档的 ReferenceMany 属性。引用设置正常,数据从查询返回正常,但 arraycollection 中的每个文档都作为代理返回。在这个网站上,我看到有人提到我应该添加->prime(true)以返回实际引用的文档。

当返回文档的 ArrayCollection 时,我正在运行一个已提交给服务器的 id 循环,以将它们从引用的集合中删除。该removeElement方法不起作用 b/c 返回的文档是代理,我正在比较实际文档与那些代理。所以基本上我正在尝试:

  1. 查找单个文档
  2. 强制ReferenceMany属性中的所有文档为实际文档而不是代理文档
  3. 循环遍历我的 id 数组并加载每个文档
  4. 将文档发送到 removeElement 方法

在下面的第一个getSingleResult查询方法中,我收到一个错误cannot modify cursor after beginning iteration。我在这个网站上看到一个帖子提到你应该初始化结果,以便获取实际文档而不是代理,在他的示例中,他使用了getSingleResult.

如果我->prime(true)从第一个查询中删除,它不会引发错误,但它实际上并没有删除任何元素,即使我在方法上设置断点,比较两个文档,并且数据完全相同,除了$this->target它们是Location代理文档,加载的是一个实际的Location文档。

我可以以某种方式启动单个结果,以便我可以ArrayCollection正确使用这些方法,还是我需要做一些 for 循环并比较 id?

更新

所以这是一个显示我遇到的问题的更新。虽然下面的解决方案只使用 MongoId(s),但当我提交一个实际的 Document 类时,它从未真正删除该文档。ArrayCollection 作为 PersistentCollection 从 Doctrine 中返回。中的每个元素$this->coll都属于此 Document 类型:

实际的文件是这样的:

removeElement方法执行这样的array_search:

所以因为对象类型并不完全相同,即使代理对象应该是从我创建的实际 Document 继承的,也$key总是返回 0(false),因此不会删除该元素。两个文档之间的所有内容都完全相同,除了对象类型。

就像我说的,我想我可以通过 MongoId 来做到这一点,但是为什么不能通过提交整个对象来工作呢?

0 投票
1 回答
1949 浏览

doctrine-orm - Doctrine 2 查询构建器与实体持久性能

摘要:哪个更快:更新/刷新实体列表,或在每个实体上运行查询生成器更新?

我们在 Doctrine ORM(2.3 版)中有以下情况。

我们有一个看起来像这样的表

我们想用这张表对一个虚构农场的报告进行排序。问题是用户希望客户订购动物(例如考拉、大象、狼、牛)。现在存在使用 CONCAT 或 CASE 为 DQL 添加权重的可能性(例如 0002wolf、0001elephant)。以我的经验,这要么很难构建,而且当我让它工作时,结果集是一个数组而不是一个集合。

因此,为了解决这个问题,我们为每条记录添加了一个“权重”字段,并且在运行选择之前,我们为每条记录分配了一个权重:

这完美地工作。为了避免竞争条件,我们在事务块中添加了这个:

这更加强大,因为它可以处理生成相同报告的多个用户。或者,可以像这样对实体进行加权:

问题:

1)这两个例子中哪一个会有更好的表现?

2)考虑到我们需要一个集合,是否有第三种或更好的方法来做到这一点?

请记住,这只是一个示例——在内存中对结果集进行排序不是一个选项,它必须在数据库级别完成——真正的语句是一个 10 表连接和 5 个 orderby。

0 投票
2 回答
28621 浏览

mysql - Expression mysql NOW() in Doctrine QueryBuilder

How to use the expression mysql NOW() in doctrine querybuilder?

0 投票
2 回答
2528 浏览

php - 如何使用多个数据库模式管理 Doctrine 查询

我有一个实体 A 与 B 的 ManyToOne 关系,但 A 和 B 不属于同一个数据库模式。

实体“A”属于 MyBundle 包,实体“B”属于 MyOtherBundle 包。

官方文档解释了如何使用不同的连接:多个模式 = 多个实体管理器。但就我而言,我想加入这两个实体。

通过做 :

或者

我只调用我的一个存储库,我猜他无法获得另一个,因为在我的 config.yml 中我只能选择一个连接。

结果:哎呀,好像出了点问题。

1/1ReflectionException: 类 FQCN\Of\MyBundle\Entity\B 不存在...

“我知道它不存在,伙计,我想让你看看现在的好地方:比如在 FQCN\Of\MyOtherBundle\Entity\B”

如何强制通往我的实体“B”的路径?

0 投票
1 回答
2599 浏览

doctrine-orm - 如何用多个连接编写这个学说查询?

我有一个实体 Person (p),它与与实体 NotificationType 相关的实体 Notifications 相关。

  • 有些人收到了类型 1 的通知 (notification_type_id = 1)。
  • 有些已收到通知,但不是类型 1
  • 有些根本没有收到消息。

在全球范围内,我想检索那些尚未收到类型 1 消息的人。

我写了这个查询:

但是通过这个查询,我只得到那些收到通知但不是类型 1 的人,我没有得到那些根本没有收到通知的人。

我怎样才能纠正我的查询以获得那些?

非常感谢你的帮助