I have a simple question about the (by the way really great!) Doctrine ODM.
Assume you have a document like:
/**
* @Document
*/
class Test
{
/** @I
It should be the Hash type:
http://readthedocs.org/docs/doctrine-mongodb-odm/en/latest/reference/annotations-reference.html?highlight=hash#hash
@Array should work. At least an equivalent exists in the ORM (@Column(type="array"))
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;
// ...
}
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]
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;
}