【问题标题】:Symfony, ODM: how to set multiply ids annotationSymfony,ODM:如何设置multiple ids annotation
【发布时间】:2017-07-01 18:05:58
【问题描述】:

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

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 变成了 null。如果我删除并只写* @ODM\Field(type="integer"),一切正常,但customerId 没有增加。那么我怎样才能在文档中使用 ids 呢?还是我错了,我不这样做?

【问题讨论】:

    标签: php mongodb symfony doctrine doctrine-odm


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      根据本文档,您只能将字符串和另一个整数中的两个键作为复合键的一部分: 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;
      

      我认为这应该适合你。

      【讨论】:

      • 注意!我不使用 ODM,所以 ORM 符号没有意义,ORM 的解决方案无法实现 ODM 符号。我只使用 ODM,只使用 mongodb。
      • 抱歉,您的帖子中有ORM 的示例,所以我弄错了。我在网上进行了搜索,我认为 ODM 的 Doctrine 不支持复合 ID。但是,我找到了这个链接:stackoverflow.com/questions/7222062/mongodb-composite-key/…,这可能对你有帮助。如果您认为我的答案不合适,我可以删除我的答案,并将该链接中的内容作为答案发布。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-24
      • 2022-01-26
      • 1970-01-01
      • 2017-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多