映射不同包之间的关联 - Doctrine / Symfony2

时间:2015-05-27 12:53:46

标签: entity-framework symfony doctrine-orm doctrine

我在stackoverflow上阅读了许多与此错误相关的问题。但是,他们似乎都没有回答我的问题。我想知道是否有人可以帮助我。

我有两个捆绑包(CoreBundle和EcommerceBundle)以及它们的实体(User和CustomerGroup)之间的双向关系。 getter和setter是使用doctrine:generate:entities创建的,所以我知道它识别了另一个bundle的路径。但是,一旦我打开一个页面,我有一个表单来编辑用户配置文件,调试栏会告诉我:

  

关联MyCompany \ EcommerceBundle \ Entity \ CustomerGroup#users指的是不存在的拥有方字段MyCompany \ CoreBundle \ Entity \ User#customerGroup。

在多次审查该协会之后,我无法弄清楚为什么Doctrine不承认拥有的一方。它的定义很明确,您可以在下面的代码中看到:

Core Bundle中的用户实体

namespace MyCompany\CoreBundle\Entity;

use FOS\UserBundle\Model\User as BaseUser;

/**
 * @ORM\Table(name="mycompany_user")
 * @ORMEntity(repositoryClass="MyCompany\CoreBundle\Repository\UserRepository")
 */
class User extends BaseUser
{

    /**
     * @ORM\ManyToOne(targetEntity="MyCompany\EcommerceBundle\Entity\CustomerGroup", inversedBy="users")
     * @ORM\JoinColumn(name="customer_group", referencedColumnName="id")
     */
    protected $customerGroup;

    /**
     * Set customerGroup
     *
     * @param \MyCompany\EcommerceBundle\Entity\CustomerGroup $customerGroup
     *
     * @return User
     */
    public function setCustomerGroup(\MyCompany\EcommerceBundle\Entity\CustomerGroup $customerGroup = null)
    {
        $this->customerGroup = $customerGroup;

        return $this;
    }

    /**
     * Get customerGroup
     *
     * @return \MyCompany\EcommerceBundle\Entity\CustomerGroup
     */
    public function getCustomerGroup()
    {
        return $this->customerGroup;
    }
}
来自电子商务套装的

CustomerGroup实体

namespace MyCompany\EcommerceBundle\Entity;

/**
 * CustomerGroup
 *
 * @ORM\Table(name="mycompany_ecommerce_customer_group")
 * @ORM\Entity(repositoryClass="MyCompany\EcommerceBundle\Entity\CustomerGroupRepository")
 */
class CustomerGroup
{
    /**
     * @ORM\OneToMany(targetEntity="MyCompany\CoreBundle\Entity\User", mappedBy="customerGroup")
     */
    protected $users;


    public function __construct()
    {
        $this->users = new ArrayCollection();
    }

    /**
     * Add user
     *
     * @param \MyCompany\CoreBundle\Entity\User $user
     *
     * @return CustomerGroup
     */
    public function addUser(\MyCompany\CoreBundle\Entity\User $user)
    {
        $this->users[] = $user;

        return $this;
    }

    /**
     * Remove user
     *
     * @param \MyCompany\CoreBundle\Entity\User $user
     */
    public function removeUser(\MyCompany\CoreBundle\Entity\User $user)
    {
        $this->users->removeElement($user);
    }

    /**
     * Get users
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getUsers()
    {
        return $this->users;
    }
}

两个捆绑包都在我的config.yml上定义:

orm:
    auto_generate_proxy_classes: "%kernel.debug%"
    entity_managers:
        default:
            connection:       default
            filters:
                notDeletable:
                    class: MyCompany\CoreBundle\Doctrine\Filter\SoftDeletableFilter
                    enabled: true
            mappings:
                MyCompanyCoreBundle: ~
                MyCompanyEcommerceBundle: ~

2 个答案:

答案 0 :(得分:0)

问题可能出在User类扩展BaseUser的方式上。是BaseUsera proper doctrine MappedSuperClass吗?

如果不是这样可能会导致问题正确验证并正确创建实体。

请发布您的BaseUser课程定义,您可以尝试一次而不延长BaseUser,看看您是否有同样的问题......

答案 1 :(得分:0)

感谢您的评论。当@pabgaran发布有关缓存时,我发现了问题。我正在清除symfony缓存。我再次阅读了doc,我看到doctrine缓存与APC缓存有关,所以我也清除了它。在那之后,它运作良好。

http://doctrine-orm.readthedocs.org/en/latest/reference/caching.html