【问题标题】:How to associate objects of one-to-many relationships?如何关联一对多关系的对象?
【发布时间】:2011-12-23 15:28:43
【问题描述】:

我正在使用带有 Doctrine ORM 的 symfony 1.4。 我有两个通过一对多关系相关的类,并且我有“一侧”的对象。我需要将这个对象(比如说 A)与“many side”对象(比如说 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,这就是我在这里要问的...我只需要将$b 添加到$a 的相关对象的Doctrine_Collection 中。

【问题讨论】:

    标签: php doctrine symfony-1.4 doctrine-collection


    【解决方案1】:

    如果你只需要构建一个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 将添加该关系,如果存在则忽略它。

    【讨论】:

    • 哇,这正是我想要的!只有一件事,什么是AFAIK?对不起,但我不是以英语为母语的人,我不确定它是英语单词还是与技术学说相关的单词……非常感谢! =)
    • 嘿 :-) 不,它只是意味着“据我所知”。我将进行编辑以使其更清晰;-)
    【解决方案2】:

    我觉得这应该以类似于您所描述的方式成为可能,但我从来没有这样做过。 首先,让我说明一下我是如何理解您的问题的:您在两个模型之间存在一对多的关系。为了使这更容易阅读,我将调用一侧的类别和许多帖子。您希望能够通过函数调用(例如 $category->add($posts))将帖子的教义集合分配给类别。

    大多数人最终都是从多方面而不是从一方面这样做的。也就是我们习惯使用$post->setCategory($category)。

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

    【讨论】:

    • 这正是我的问题!我做了一些类似于你建议的事情,但我没有测试过,所以我不确定它是否有效。我的疑问是:当您为帖子分配类别时,类别对象上的 Posts Doctrine_Collection 会同时更新?
    • 啊,有趣。好吧,教义集合是您最后一个查询的结果集合,所以我怀疑它会随着对该对象的更改而更新。将帖子分配给类别后,您需要运行查询。
    • 我是这么认为的......无论如何,谢谢!看看richsage的回答... =)
    猜你喜欢
    • 2015-03-16
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    相关资源
    最近更新 更多