在集合“添加”方法中设置所有权的任何缺点?

时间:2012-12-13 13:16:18

标签: php symfony doctrine-orm

当您在Symfony2中自动生成具有多对多关联的教义时,您会得到类似的内容:

/**
 * Add child
 *
 * @param Acme\Entity\Child $child
 * @return Parent
 */
public function addChild(\Acme\Entity\Child $child)
{
    $this->children[] = $child;

    return $this;
}

如果这是与孩子拥有一方的双向关联(OneToMany通常是这样的),每当你添加一个孩子时,你将不得不添加这一行:

$parent->addChild($child);
$child->setParent($parent);

通常我最终会更改addChild方法,如下所示:

/**
 * Add child
 *
 * @param Acme\Entity\Child $child
 * @return Parent
 */
public function addChild(\Acme\Entity\Child $child)
{
    $this->children[] = $child;
    $child->setParent($this)
    return $this;
}

我只是想知道为什么这不是默认生成的方法(对于双向情况),或者如果我可以为我的所有双向关联执行此操作而不考虑我的应用程序中的用法。

你能弄清楚这种做法的任何缺点吗?是否会导致意外/不良行为?

感谢。

1 个答案:

答案 0 :(得分:2)

文档章节Getting Started: Code First(搜索“确保一致性”)实际上建议这样做,但从另一方面来说(在拥有方面进行)。

我不确定为什么它不是由代码生成自动完成的。我不认为“并非每个关系都将是双向的”这一论点成立,因为在代码生成时,已经知道哪些关系是双向的,哪些是单向的。

我认为这只是一种疏忽,学说团队总是说不应该依赖代码生成工具。