2

アプリに複数のバンドルがあり、テーブル間に関係を持たせたいと考えています。1 つは UserBundle にある私のユーザー (StoreOwner) で、2 番目は StoreBundle のストアです。

それらの間の関係は、OneToMany (ユーザー -> の所有者 -> ストア) です。

/**
 * Description of Store
 * 
 * @ORM\Table(name="Store")
 * @ORM\Entity(repositoryClass="Traffic\StoreBundle\Repository\StoreRepository")
 * @author bart
 */
class Store extends StoreModel {

    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var string $name
     *
     * @ORM\Column(type="string", length=255)
     * @Assert\NotBlank(
     *    message="Please provide your shop name"
     * )
     */
    protected $name;


    /**
     * @ORM\ManyToOne(targetEntity="Application\Sonata\UserBundle\Entity\StoreOwner", inversedBy="stores")
     * 
     */
    protected $owner;

}

店主

/**
 * @ORM\Entity
 * 
 */
class StoreOwner extends User implements StoreOwnerInterface {

    /**
     * @var type ArrayCollection()
     * 
     * @ORM\OneToMany(targetEntity="Traffic\StoreBundle\Entity\Store", mappedBy="owner", cascade={"persist"})
     */
    protected $stores;

}

私の質問は:

StoreBundle と UserBundle の間の依存関係を回避し、Doctrine のエンティティ間の関係を維持する解決策はありますか?

4

1 に答える 1

3

これは私の意見では有効な懸念事項です。バンドル間の双方向の依存関係は匂いです。

依存関係の問題を解決する1つの方法は、エンティティをバンドルからより一般的な名前空間に移動することです。このように、両方のバンドルは同じ「ライブラリ」に依存しますが、相互に直接依存することはありません。

私は最近、それを行う方法についてブログ投稿を書きました:Symfonyバンドルの外にDoctrineエンティティを保存する方法は?

于 2013-02-01T15:05:20.260 に答える