OneToOne引用的Symfony2结果为null


Symfony2 Result is null by OneToOne Reference

我是Symfony2的初学者。

我的目标是将所有旧的内联网工具从用PHP4编写的有缺陷的自由式代码转换为面向对象的现代代码。目前,在使用OneToOne映射时,我对Doctrine有一个问题。

我有一个表公司,它包含一个名为extent_id的列,它是对表company_extent的引用。

我现在等待:在我的Company对象中引用了正确的company_extent

这就是我尝试过的:

/**
 * @ORM'Entity
 * @ORM'Table(name="company")
 */
class Company
{
    /**
     * @OneToOne(targetEntity="CompanyExtent", inversedBy="company")
     * @JoinColumn(name="extent_id", referencedColumnName="id")
     **/
    private $extent;
}
class CompanyExtent
{
    /**
     * @ORM'OneToOne(targetEntity="Company", mappedBy="extent")
     */
    private $company;
}

但是,如果我放弃我的公司对象,我会得到:

object(Dsa'ServiceMeetingBundle'Entity'Company)[274]
    protected 'extentId' => int 1
    private 'extent' => null
    protected 'stretchId' => int 1

您必须为创建的每个实体添加一个"ID"属性。

/**
 * @ORM'Entity
 * @ORM'Table(name="company")
 */
class Company
{
    /**
    * @ORM'Id
    * @ORM'Column(type="integer")
    * @ORM'GeneratedValue(strategy="AUTO")
    */
    private $id;
    /**
     * @OneToOne(targetEntity="CompanyExtent", inversedBy="company")
     * @JoinColumn(name="extent_id", referencedColumnName="id")
     **/
    private $extent; 
}

在注释@JoinColumn(name="extent_id", referencedColumnName="id")中,您使用的是一个不存在的引用。

class CompanyExtent
{
   /**
    * @ORM'Id
    * @ORM'Column(type="integer")
    * @ORM'GeneratedValue(strategy="AUTO")
    */
   private $id;
    /**
     * @ORM'OneToOne(targetEntity="Company", mappedBy="extent")
     */
    private $company;
}

正如@cerad所提到的,我建议你阅读一下Doctrine的对象关系管理器。这是发展的重要组成部分。