Symfony2结果由One To One Reference为空

时间:2015-02-17 14:59:43

标签: php symfony doctrine-orm

我是Symfony2的初学者。

我的目标是将所有旧的Intranet工具从用PHP 4编写的buggy,freestyle-code转换为面向对象和现代代码。目前,在使用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

1 个答案:

答案 0 :(得分:0)

您必须为您创建的每个实体添加“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的对象关系管理器。这是发展的一个非常重要的部分。