【发布时间】:2011-04-10 11:29:42
【问题描述】:
我正在为 PHP 使用 Doctrine ORM,我有一个关于加载关系的问题。模型似乎根据加载方式加载了一组不同的关系,有人知道解决这个问题的方法吗?
这可能有点令人困惑。这是一个例子。假设我们有模型 A 和模型 B,具有多对多关系 - A 有一个或多个 B。在我的数据集中,我有一个 A 记录“A1”,它与两个 B 记录“B1”和“B2”相关。
我需要通过两种方式加载 A 记录,但在这两种情况下,我都希望能够使用 $myModelA->B 获取所有相关的 B 记录。
第一种情况是直接加载“A1”。所以我会去$myModelA = A_Table->find("A1"),很简单。然后当我去$myModelA->B 时,我将能够看到“B1”和“B2”。这是意料之中的。
第二种情况会导致问题。我想查找与“B2”相关的所有 A 记录。所以我创建了一个 Doctrine_Query 并在 A 和 B 之间进行连接,并指定我想要与“B2”相关的 A 记录。现在我想浏览我的 A 记录列表,其中之一是“A1”。因此,由于我在 $myModelA 中有“A1”模型,与第一种情况相同,我希望当我去 $myModelA->B 时,我可以看到“B1”和“B2”。
但事实并非如此。我只看到“B2”。我认为这是因为我用来检索“A1”的查询首先只需要“B2”相关记录,所以当我以另一种方式跟踪关系时,条件仍然存在,所以我只能得到“B2”。
问题是……如何强制场景二中的模型忽略之前的查询并将所有相关记录加载到该模型中?
谢谢!
【问题讨论】:
-
您能否提供一些与Relationships 形式类似的文档化代码?