我正在使用Doctrine ORM for PHP,我对加载关系有疑问。一个模型似乎根据它的加载方式加载了一组不同的关系,有没有人知道解决这个问题的方法呢?
这可能有点令人困惑。这是一个例子。假设我们有模型A和模型B,具有多对多的关系--A有一个或多个Bs。在我的数据集中,我有一个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之间进行连接,并指定我想要A记录与“B2”相关。现在我想查看我的A记录列表,其中一个是“A1”。所以,由于我在$myModelA
中有“A1”模型,与第一种情况相同,我希望当我去$myModelA->B
时,我可以看到“B1”和& “B2”。
但事实并非如此。我只看到“B2”。我认为这是因为我用来检索“A1”的查询首先只需要“B2”相关记录,所以当我按照关系回到另一种方式时,条件仍然存在,所以我只能得到“B2”。
问题是......如何在场景二中强制模型忽略上一个查询并将所有相关记录加载到该模型?
谢谢!
答案 0 :(得分:0)
我认为您可以在A上调用refresh()
。确保以true
为参数调用它,以便刷新您的关系。
$A1->refresh(true);