【问题标题】:Can't add fields to my user class (Fos_UserBundle)无法将字段添加到我的用户类 (Fos_UserBundle)
【发布时间】:2012-07-21 22:33:03
【问题描述】:

我正在尝试修改我的用户类 (FOS_UserBundle)。我有一个包含公司的单独表格,当创建用户时,我希望它与其中一家公司相关联。最终我将不得不发现在公司表中创建条目时如何自动创建用户,但现在我只是尝试提供测试数据。

/**
 * @ORM\Entity
 * @ORM\Table(name="fos_user")
 */
class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
    * @var object BizTV\BackendBundle\Entity\company
    *  
    * @ORM\ManyToOne(targetEntity="BizTV\BackendBundle\Entity\company")
    * @ORM\JoinColumn(name="company", referencedColumnName="id")
    */
    protected $company; 

在我的构造中我尝试设置

$this->company = 1;

但这行不通,因为它需要一个对象,所以我实例化了公司对象并用虚拟数据填充它...

$dummy = new company;
$dummy->setActive(true);
$dummy->setCompanyName('myCompany');
$dummy->setId(1);

$this->company = $dummy;

然后我收到一条关于找到新实体的错误消息...

通过关系“BizTV\UserBundle\Entity\User#company”找到了一个新实体,该实体未配置为对实体进行级联持久化操作: BizTV\BackendBundle\Entity\company@0000000018a5279000000000049c7b23。显式持久化新实体或在关系上配置级联持久化操作。如果您无法找出导致问题的实体,请执行 'BizTV\BackendBundle\Entity\company#__toString()' 以获得线索。

【问题讨论】:

  • fos_user 表到公司表的 FK 是什么?我认为@ORM\JoinColumn(name="id", referencedColumnName="id") 是错误的,因为用户类的id 显然不是公司的FK,对吗?应该是name="company_id" 或者我想的。这不是关于 symfony,而是关于 Doctrine
  • 你说得对,我相应地更新了问题,但仍然存在一个问题..
  • 在刷新 em 之前,您是否像 $em->persist($dummy) 那样持久化公司对象?否则会发生错误。

标签: php symfony fosuserbundle


【解决方案1】:

在 User::$company 属性注解中添加级联持久化选项:

/**
 * @ORM\ManyToOne(targetEntity="BizTV\BackendBundle\Entity\company", cascade={"persist"})
 * @ORM\JoinColumn(name="company", referencedColumnName="id")
 */
protected $company;

您可以在这里找到相关文档:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/working-with-associations.html#transitive-persistence-cascade-operations

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 2019-08-05
    相关资源
    最近更新 更多