1

Symfony2 で to-many 関連付けを使用して doctrine entites を自動生成すると、次のような結果が得られます。

/**
 * 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

ドキュメントの章、Getting Started: Code First (「一貫性の確保」を検索) では、実際にはこれを行うことを推奨していますが、逆の方法 (所有側で行う) を推奨しています。

コード生成によって自動的に行われない理由がわかりません。「すべてのリレーションが双方向になるわけではない」という議論は成り立たないと思います。なぜなら、コード生成時に、どのリレーションが双方向で、どれが単方向であるかがすでにわかっているからです。

これは単なる見落としだと思います。ドクトリン チームは常に、コード生成ツールは信頼すべきではないと言っています。

于 2012-12-14T20:44:03.810 に答える