Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Which mapping type to choose for associative Arrays? Doctrine ODM

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

Assume you have a document like:

/**
 * @Document
 */
class Test
{
    /** @Id */
    public $id;
    /** @WHICHTYPE */
    public $field = array();
}

Now i want to store an associative array like

array("test" => "test1", "anothertest" => "test2", ......);

In the $field property of that class.

No problem for MongoDB, I know, but in Doctrine when I use for example @Collection or simply @Field, only the values are stored (array_values is being used in the mapping driver for collection for example). So the stored value looks like

array("test1", "test2", ....)

Does anyone know which Doctrine-ODM mapping type I should use in order to preserve the key-value pairs in the database?

Thank you in advance,

Andi (greetz from germany)

like image 792
Andreas Schmidt Avatar asked Nov 15 '10 15:11

Andreas Schmidt


2 Answers

It should be the Hash type:

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

like image 98
Florian Klein Avatar answered Sep 27 '22 00:09

Florian Klein


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]

like image 39
iffi Avatar answered Sep 24 '22 00:09

iffi