Php Doctrine2连接列
我已经在doctrine2中定义了follow实体(使用symfony) 我意识到,如果调用$order->getPersonId(),它总是返回一个空值,我必须调用getPerson()->getId()方法才能获得正确的personid。 有人能解释一下为什么$personid变量没有被填充吗? 如果我定义了列id,是否应该删除用于联接的列id 谢谢Php Doctrine2连接列,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我已经在doctrine2中定义了follow实体(使用symfony) 我意识到,如果调用$order->getPersonId(),它总是返回一个空值,我必须调用getPerson()->getId()方法才能获得正确的personid。 有人能解释一下为什么$personid变量没有被填充吗? 如果我定义了列id,是否应该删除用于联接的列id 谢谢 Gisella您应该删除private$personid,最好只在ORM中使用对象 如果您使用$order->getPerson()->get
Gisella您应该删除
private$personid代码>,最好只在ORM中使用对象
如果您使用$order->getPerson()->getId()
获取ID,这不是问题,因为条令不会加载完整的实体。只有在调用join键以外的字段时,才会加载人员
实体
您仍然可以使用如下getter快捷方式:
public function getPersonId()
{
return $this->getPerson()->getId();
}
编辑:
如果使用条令引用,也可以使用“ID”,如下所示:
$order->setPerson($em->getReference('YourBundle:People', $personId));
通过这种方式,条令将不会执行SELECT
查询来加载此人的数据。当您已经有了$personid字段时,您不需要有$personid字段。
$people包含人物对象(包括id在内的所有人物属性)
此外,当您将对象转换为sql表时,他知道他必须与th id连接,以便它将创建一个名为personid的字段(在数据库中)。(这是您在ORM中定义的名称)
抱歉英语不好:p谢谢您的回复。你建议了一个很好的解决办法。无论如何,我通常在创建新的Order对象时设置$personid而不是People对象。它仍然正确吗?我更新了我的答案:如果您只想使用您的ID,可以将getReference()
与EntityManager
一起使用。
$order->setPerson($em->getReference('YourBundle:People', $personId));
/**
* @ORM\OneToOne(targetEntity="People")
* @ORM\JoinColumn(name="personid", referencedColumnName="personid")
*/
private $person;