如何避免与来自不同bundle的实体的依赖关系

时间:2013-02-01 11:59:52

标签: symfony dependency-injection doctrine-orm entity-relationship database-relations

我的应用程序中有几个包,我想在表之间建立关系。 一个是UserBundle中的User(StoreOwner),第二个是StoreBundle中的Store。

他们之间的关系是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中实体之间的关系?

1 个答案:

答案 0 :(得分:3)

在我看来,这是一个有效的问题。捆绑之间的双向依赖是一种气味。

解决依赖性问题的一种方法是将实体从包中移出到更通用的命名空间中。这样,两个捆绑包将依赖于相同的“库”,但不会直接相互依赖。

我最近写了一篇关于如何做的博客文章:How to store Doctrine entities outside of a Symfony bundle?