Doctrine2 join column



我在doctrine2中定义了以下实体(使用symfony)。

/**
 * 
 * @ORMTable(name="order")
 * @ORMEntity
 */
class Order
 /**
 * @var integer
 *
 * @ORMColumn(name="personid", type="integer", nullable=false)
 */
private $personid;
 /**
 * @ORMOneToOne(targetEntity="People")
 * @ORMJoinColumn(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

你应该删除private $personid;,最好只处理ORM中的对象。

这不是一个问题,如果你得到ID与$order->getPerson()->getId(),因为学说不会加载完整的实体。People实体只有在调用连接键以外的其他字段时才会被加载。

你仍然可以有这样的getter快捷方式:

public function getPersonId()
{
    return $this->getPerson()->getId();
}

编辑:如果你使用Doctrine引用,你也可以使用"ID",像这样:

$order->setPerson($em->getReference('YourBundle:People', $personId));

通过这种方式,Doctrine将不会执行SELECT查询来加载该人的数据。

如果已经有了$person字段,就不需要再添加$personid字段了。$people包含people对象(包含所有people的属性,包括id)。

此外,当doctrine将您的对象转换为sql表时,他知道他必须与id连接,这样它将在数据库中创建一个名为personid的字段。(这是您在ORM中定义的名称)

  /**
 * @ORMOneToOne(targetEntity="People")
 * @ORMJoinColumn(name="personid", referencedColumnName="personid")
 */
private $person;
p

最新更新