OneToOne Reference 的 Symfony2 结果为空

Symfony2 Result is null by OneToOne Reference

我是 Symfony2 的初学者。

我的目标是将所有旧的 Intranet 工具从用 PHP 4 编写的有缺陷的自由式代码转换为面向对象的现代代码。目前我在使用 OneToOne 映射时遇到 Doctrine 问题。

我有一家 table 公司,其中包含一个名为 extent_id 的列,它是对 table 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 的对象关系管理器。这是开发中非常重要的一部分。