dtnat80842
2018-08-14 15:29
浏览 68

实体数组/ PHP / MongoDB / Symfony

Simple question :

I am using mongoDB, Symfony 3.4, and the DoctrineMongoDBBundle. How can I create a value in an mongoDB entity that is an array of entities

For example : Have a conversation entity with a value message in it that is an array of entities message

Example in json :

{
    "id_of_the_conversation": 367,
    "messages": [
        {
            "id": 1,
            "content": "Hello i need help !",
            "send_by": 34,
            "received_by": 22
        }
        {
            "id": 2,
            "content": "Stack stack",
            "send_by": 22,
            "received_by": 34
        }
        {
            "id": 3,
            "content": "Maybe someone ?",
            "send_by": 34,
            "received_by": 22
        }
    ],
}

图片转代码服务由CSDN问答提供 功能建议

简单问题:

我正在使用 mongoDB Symfony 3.4 ,以及 DoctrineMongoDBBundle 。 如何在 mongoDB 实体中创建一个值,该实体是一个实体数组

例如:让一个带有值消息的会话实体,它是一个实体数组消息

json 中的示例:

  {
“id_of_the_conversation”:367,
“messages”:[
 {
“id”:1,
“”content“:”你好我 需要帮助!“,
”send_by“:34,
”received_by“:22 
} 
 {
”id“:2,
”“content”:“堆栈”,
“send_by”  :22,
“received_by”:34 
} 
 {
“id”:3,
“”content“:”也许有人?“,
”send_by“:34,
”received_by“:  22 
} 
],
} 
   
 
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • dqhbuwrwq692118284 2018-08-17 13:56
    已采纳

    I can't add comment on another post so I make my own post.

    What @iiirxs said is right.

    You hav to do the 2 Document Classes and Make annotation like you want.

    If you want the Messages to have their own Collection, you annotate with ReferenceMany. If you want the the Messages inside the COnversation Document, you make an EmbedMany

    Embed Docs

    References Docs

    Then, you just have to set or add Messages in the Collection messages property of Conversation class.

    When you save, all documents (Conversion AND Message of you Reference, only Conversation whit Message in it if you embed) will be saved.

    From you original question, it seems you want to Embed.

    已采纳该答案
    打赏 评论
  • duanji9481 2018-08-14 16:03

    Typically you should create two entities(in MongoDb these are called documents):

    <?php
    
    /** @Document */
    class Message
    {
        /** @Id(strategy="INCREMENT") */
        private $id;
    
        /** @ReferenceOne(targetDocument="Conversation") */
        private $conversation;
    
        /** @Field(type="string") */
        private $content;
    
        /** @ReferenceOne(targetDocument="User") */
        private $send_by;
    
        /** @ReferenceOne(targetDocument="User") */
        private $received_by;
    }
    
    /** @Document */
    class Conversation
    {
        // ...
    
        /** @ReferenceMany(targetDocument="Message") */
        private $messages;
    }
    

    You can read the full documentation here

    打赏 评论

相关推荐 更多相似问题