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

Unidirectional many-to-one relation in Doctrine MongoDB ODM without MongoId

我正在尝试将以下 Doctrine ORM 示例移植到 Doctrine ODM。

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

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

我正在寻找 @JoinColumn() 的对应项,我在文档中找不到它。基本上,我想自己设置引用字段名和引用字段名。我该怎么做?

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

这就是您在 MongoODM 中应该做的,将地址的 属性 作为 id,User 将通过该字段的值引用 Address。您还应该设置 simple=true 作为参考。

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

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

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