我在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: ~
答案 0 :(得分:0)
问题可能出在User
类扩展BaseUser
的方式上。是BaseUser
班a proper doctrine MappedSuperClass
吗?
如果不是这样可能会导致问题正确验证并正确创建实体。
请发布您的BaseUser
课程定义,您可以尝试一次而不延长BaseUser
,看看您是否有同样的问题......
答案 1 :(得分:0)
感谢您的评论。当@pabgaran发布有关缓存时,我发现了问题。我正在清除symfony缓存。我再次阅读了doc,我看到doctrine缓存与APC缓存有关,所以我也清除了它。在那之后,它运作良好。
http://doctrine-orm.readthedocs.org/en/latest/reference/caching.html