我在doctrine2中定义了跟随实体(使用symfony)。
/**
*
* @ORM\Table(name="order")
* @ORM\Entity
*/
class Order
/**
* @var integer
*
* @ORM\Column(name="personid", type="integer", nullable=false)
*/
private $personid;
/**
* @ORM\OneToOne(targetEntity="People")
* @ORM\JoinColumn(name="personid", referencedColumnName="personid")
*/
private $person;
public function getPersonId()
{
return $this->personid;
}
public function getPerson()
{
return $this->person;
}
}
我意识到,如果我调用$ order-> getPersonId(),它总是返回一个空值,我必须调用getPerson() - > getId()方法来获取正确的personid。 任何人都可以解释为什么变量$ personid没有填充? 如果我定义了一个,我应该删除用于连接的列ID吗?
由于
Gisella
答案 0 :(得分:2)
您应该删除private $personid;
,最好只在ORM中使用对象。
如果您使用$order->getPerson()->getId()
获取ID,则不会出现问题,因为Doctrine不会加载完整的实体。只有在您调用除连接键之外的其他字段时,才会加载People
实体。
你仍然可以使用这样的getter快捷方式:
public function getPersonId()
{
return $this->getPerson()->getId();
}
编辑: 如果您使用Doctrine引用,您仍然可以使用“ID”,如下所示:
$order->setPerson($em->getReference('YourBundle:People', $personId));
通过这种方式,Doctrine将不会执行SELECT
查询来加载此人的数据。
答案 1 :(得分:0)
当您已拥有$ person字段时,您不需要拥有$ personid字段。 $ people包含People对象(所有People的属性包括id)。
此外,当doctrine将您的对象转换为sql表时,他知道他必须加入id,因此它将创建一个名为personid的字段(在数据库中)。 (它是您在ORM中定义的名称)
/**
* @ORM\OneToOne(targetEntity="People")
* @ORM\JoinColumn(name="personid", referencedColumnName="personid")
*/
private $person;
抱歉英语不好:p