我的应用程序中有几个捆绑包,我想在表之间建立关系。一个是我的User(StoreOwner),它位于UserBundle中,第二个是StoreBundle中的存储。
它们之间的关系是OneToMany(用户->是->商店的所有者)。
商店
/**
* Description of Store
*
* @ORMTable(name="Store")
* @ORMEntity(repositoryClass="TrafficStoreBundleRepositoryStoreRepository")
* @author bart
*/
class Store extends StoreModel {
/**
* @var integer $id
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var string $name
*
* @ORMColumn(type="string", length=255)
* @AssertNotBlank(
* message="Please provide your shop name"
* )
*/
protected $name;
/**
* @ORMManyToOne(targetEntity="ApplicationSonataUserBundleEntityStoreOwner", inversedBy="stores")
*
*/
protected $owner;
}
店主
/**
* @ORMEntity
*
*/
class StoreOwner extends User implements StoreOwnerInterface {
/**
* @var type ArrayCollection()
*
* @ORMOneToMany(targetEntity="TrafficStoreBundleEntityStore", mappedBy="owner", cascade={"persist"})
*/
protected $stores;
}
我的问题是:
是否有任何解决方案可以避免StoreBundle和UserBundle之间的依赖关系,并保持Doctrine中实体之间的关系?
在我看来,这是一个合理的担忧。捆绑包之间的双向依赖是一种气味。
解决依赖关系问题的一种方法是将实体从捆绑包中移出到更通用的命名空间中。这样,两个捆绑包将依赖于同一个"库",但不会直接相互依赖。
我最近写了一篇关于如何做到这一点的博客文章:如何在Symfony捆绑包之外存储Doctrine实体?