Symfony,ODM:如何设置 multiply ids 注释

Symfony, ODM: how to set multiply ids annotation

那么问题是如何提供两个或多个标识符键?我在 google 搜索中找不到关于这个问题的任何答案...这是示例:

class Customer
{
    /**
     * @ODM\Id
     *
     * @JMS\Expose
     * @JMS\Type("string")
     *
     */
    protected $id;

    /**
     * @var integer
     * @ODM\Id(strategy="INCREMENT")
     *
     * @JMS\Expose
     * @JMS\Type("integer")
     *
     */
    protected $customerId;

所以在这种情况下,我有第二个 id,它随着我写的而递增,但第一个 id 变为空。如果我删除并只写 * @ODM\Field(type="integer") 一切正常,但不会增加 customerId。那么我怎么能在文档中有id呢?或者我错了,我没有这样做?

根据本文档,您只能有两个键,一个是字符串,另一个是整数作为复合键的一部分: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/composite-primary-keys.html

所以尝试:

class Customer
{
    /**
     * @ODM\Id
     * @ORM\Column(name="id", type="string")
     *
     * @JMS\Expose
     * @JMS\Type("string")
     *
     */
    protected $id;

    /**
     * @var integer
     * @ODM\Id(strategy="INCREMENT")
     * @ORM\Column(name="customerId", type="integer")
     *
     * @JMS\Expose
     * @JMS\Type("integer")
     *
     */
    protected $customerId;

我认为这对你有用。

标识符自动映射为 _id 字段,因此只能有 1 个字段映射为 @Id

过去做过类似的事情,我建议保留 \MongoId 作为文档标识符并在代码中生成递增的 customerId 而不是依赖 ODM 来这样做。制作这样的生成器非常简单,您需要连接持久文档(无论是在您的域代码中,我建议,还是利用 prePersist 事件)并编写类似于 ODM 的 IncrementGenerator.[=16 的生成器=]