我是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的对象关系管理器。这是发展的重要组成部分。