Php Doctrine2连接列

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

我已经在doctrine2中定义了follow实体(使用symfony)

我意识到,如果调用$order->getPersonId(),它总是返回一个空值,我必须调用getPerson()->getId()方法才能获得正确的personid。 有人能解释一下为什么$personid变量没有被填充吗? 如果我定义了列id,是否应该删除用于联接的列id

谢谢


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;