2

我的应用程序中有几个捆绑包,我想在表之间建立关系。一个是我的 User(StoreOwner) 在 UserBundle 中,第二个是 Store 在 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

在我看来,这是一个合理的担忧。捆绑包之间的双向依赖是一种气味。

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

I recently wrote a blog post on how to do it: How to store Doctrine entities outside of a Symfony bundle?

于 2013-02-01T15:05:20.260 回答