如何关联一对多关系的对象


How to associate objects of one-to-many relationships?

我使用symfony 1.4与Doctrine ORM。我有两个通过一对多关系关联的类,并且我有"一侧"的对象。我需要将这个对象,假设是A,关联到"多面"对象,假设是b,问题是A没有一个方法可以只将一个对象添加到它的Doctrine_Collection属性中,而是它有一个接收一个Doctrine_Collection的setter。我怎样才能实现这种联系?

我有这样的东西:

$a = new A();
$b = new B(); // Obviously, $b is not new, this is just for reference
$a->setB($b); // This is what I can't do. A::setB() receives a 
              // Doctrine_Collection of objects of type B, and I don't
              // know how to build it.

请,任何帮助将是非常感激的!谢谢!

编辑:

也许我没有把自己解释清楚。我的人际关系安排得很好。我没有试图检索任何对象;相反,我试图设置对象。问题是方法A::setB()需要一个Doctrine_Collection作为参数,而不是对象本身。我不知道如何构建Doctrine_Collection,这就是我在这里问的…我只需要把$a的相关对象的Doctrine_Collection加上$b

如果您只需要构建一个Doctrine_Collection,您可以这样做:

// here, 'B' is the type of objects in the collection
$collection = new Doctrine_Collection("B");
$collection->add($b);
$a->setB($collection);

你也可以这样做:

$a->b[] = $b;

并且,据我所知,Doctrine会在关系不存在的情况下添加它,如果存在则忽略它。

我觉得这应该是可能的,在某种程度上类似于你所描述的,但我从来没有。首先,让我说明一下我是如何理解你的问题的:你在两个模型之间有一对多的关系。为了更容易阅读,我将一边称为类别和许多帖子。您希望能够通过函数调用(如$category->add($posts))将文章的原则集合分配给类别。

大多数人最终会从多个方面而不是一个方面做这件事。也就是说,我们习惯使用$post->setCategory($category)。

就我个人而言,我只会浏览帖子并为每个帖子分配类别。如果您发现在一些地方需要这样做,您可能应该在您的类别类中创建一个自定义函数来处理此操作。