我的问题如下:我有一个存储这些对象的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 但我仍然不知道它是如何运作的以及如何在我的案例中实施它。
答案 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