我是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
答案 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的对象关系管理器。这是发展的一个非常重要的部分。