Which mapping type to choose for associative Arrays? Doctrine ODM

前端 未结 5 2297
深忆病人
深忆病人 2021-02-13 23:45

I have a simple question about the (by the way really great!) Doctrine ODM.

Assume you have a document like:

/**
 * @Document
 */
class Test
{
    /** @I         


        
相关标签:
5条回答
  • 2021-02-14 00:03

    It should be the Hash type:

    http://readthedocs.org/docs/doctrine-mongodb-odm/en/latest/reference/annotations-reference.html?highlight=hash#hash

    0 讨论(0)
  • 2021-02-14 00:12

    @Array should work. At least an equivalent exists in the ORM (@Column(type="array"))

    0 讨论(0)
  • 2021-02-14 00:22

    The best answer is using hash type. But if for some reason you wantn't use hash type, you can use EmbeddedDocument feature provided by Doctrine ODM like the documentation says:

    If you are using the hash type, values within the associative array are passed to MongoDB directly, without being prepared. Only formats suitable for the Mongo driver should be used. If your hash contains values which are not suitable you should either use an embedded document or use formats provided by the MongoDB driver (e.g. \MongoDate instead of \DateTime).

    So, you need to create EmbeddedDocument EmbeddedExample in AppBundle\Document\EmbeddedExample.php:

    <?php
    
    namespace AppBundle\Document;
    
    use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
    
    /**
     * @MongoDB\EmbeddedDocument()
     */
    class EmbeddedExample
    {
        /**
         * @MongoDB\Field(type="int")
         */
        protected $some_name;
    
        // ...
        // getter and setter
    }
    

    Then, you can use EmbeddedExample in your Test document. So the Test.php file will be similar to this:

    <?php
    
    namespace AppBundle\Document;
    
    use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
    
    /**
    * @MongoDB\Document(repositoryClass="AppBundle\Repository\TestRepository")
    */
    class Test
    {
    
        /** @MongoDB\EmbedOne(targetDocument="EmbeddedExample") */
        private $field;
    
        // ...
    }
    
    0 讨论(0)
  • 2021-02-14 00:23

    For versions before ODM 2.0 @Hash will provide the necessary data type. However after ODM 2.0 @Hash field is being removed. In order to use it we have to use @field with type hash. For further reference [click here][1]

    0 讨论(0)
  • 2021-02-14 00:23

    I think you're looking for hash data type. Aren't you?

    use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
    
    /**
     * @Document
     */
    class Test
    {
        /** @Id */
        public $id;
    
        /**
         * @MongoDB\Field(type="hash")
        */
        public $field;
    }
    
    0 讨论(0)
提交回复
热议问题