没有MongoId的Doctrine MongoDB ODM中的单向多对一关系

时间:2016-03-23 12:23:02

标签: php mongodb symfony doctrine-orm doctrine-odm

我试图将以下Doctrine ORM示例移植到Doctrine ODM。

<?php
/** @Entity */
class User
{
    /**
     * @ManyToOne(targetEntity="Address")
     * @JoinColumn(name="address_id", referencedColumnName="address_id")
     */
     private $address;
}

/** @Entity */
class Address
{
    // ...
}

我正在寻找@JoinColumn()的副本,我无法在文档中找到它。基本上,我想自己设置引用字段名称和引用的字段名称。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

在MongoDB中,你只能通过id引用,但你不仅限于使用MongoID。事实上,你可以使用你喜欢的任何东西,包括作为id的对象。

这是您应该在MongoODM中执行的操作,要使Address的属性为id,User将通过该字段的值引用Address。您还应该设置simple=true作为参考。

/**
 * @Document
 */
class User
{
    /**
     * @ReferenceOne(targetDocument="Address", simple=true)
     */
    protected $address;
}

/**
 * @Document
 */
class Address
{
    /**
     * @Id(strategy="NONE")
     */
    protected $someProperty;
}

请记住,如果您在一个或多个用户引用的任何地址中更改该属性的值,那么该引用将会损坏并在Doctrine ODM中导致一些痛苦的错误。