1

当你在 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;
}

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

你能找出这种做法的任何缺点吗?任何会导致意外/不良行为的情况?

谢谢。

4

1 回答 1

2

文档章节,入门:代码优先(搜索“确保一致性”)实际上建议这样做,但反过来(在拥有方进行)。

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

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

于 2012-12-14T20:44:03.810 回答