Symfony2& DoctrineMongoDB ODM:自定义映射类型

时间:2015-11-26 23:10:59

标签: mongodb symfony doctrine-odm

我的问题如下:我有一个存储这些对象的mongo数据库 { "name":"Accord Neo", "number_of_photos":"3", "id":"accord_neo", "description":"Very comfortable sofa.", "details": { "chair_is": false, "Sofa_bed": "delfin", "Structure_configuration": "corner" }, "properties":[ { "property":"2-У-1", "value":"2150 X 1550 X 880" }, { "property":"Sleeping place", "value":"2150 X 1550 X 880" } ] }​

我需要使用Doctrine Mapping Types在Symfony2中检索这些对象,问题是我不知道如何为字段“details”和字段“properties”创建Mapping的自定义类。我试图从学说的官方网站上做出类比 http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/basic-mapping.html#custom-mapping-types  但我仍然不知道它是如何运作的以及如何在我的案例中实施它。

1 个答案:

答案 0 :(得分:0)

为“详细信息”创建一个新文档,如下所示:

/**
 * @MongoDB\EmbedOne(targetDocument="Details")
 */
protected $details;

/**
 * @MongoDB\EmbedMany(targetDocument="Properties")
 */
protected $propertieslist;

public function __construct()
{
        $this->propertieslist = new ArrayCollection();
}

请注意,它是一个embeddeddocument,因此它将作为mongodb中一条记录的一部分进行存储。对属性

执行完全相同的操作

然后在您的父对象中,嵌入一组它们并在构造函数中创建集合:

$userdata = array(
        'email' => $request->email,
        'Password' => $request->password
);

您可以使用symfony附带的工具生成您的setter和getter。

假设您正在使用Forms来管理它们,您需要为每个嵌入文档创建一个FormType。

有关详细信息,您只需将“new DetailsType”作为您的类型(而不是“text”或“choice”)。

对于属性,您需要添加“集合”,然后传递一个数组,其中'type'=>新的PropertiesType。要动态添加和删除,需要一些javascript。详细信息如下:http://symfony.com/doc/current/cookbook/form/form_collections.html