Php 在Symfony 2.1中将MongoDB哈希类型作为增强键/值形式的原则
我在MongoDB中有一个映射类型为hash,名为“meta_info”,它只保存某个东西的键/值列表,我想将其转换为Symfony2中的一个表单,可以动态增强(使用js),使其看起来(基本上)如下:Php 在Symfony 2.1中将MongoDB哈希类型作为增强键/值形式的原则,php,mongodb,symfony,symfony-forms,symfony-2.1,Php,Mongodb,Symfony,Symfony Forms,Symfony 2.1,我在MongoDB中有一个映射类型为hash,名为“meta_info”,它只保存某个东西的键/值列表,我想将其转换为Symfony2中的一个表单,可以动态增强(使用js),使其看起来(基本上)如下: <input type="text" name="meta_info[key][]" /><input type="text" name="meta_info[field][]"> [- remove row] <input type="text" name="m
<input type="text" name="meta_info[key][]" /><input type="text" name="meta_info[field][]"> [- remove row]
<input type="text" name="meta_info[key][]" /><input type="text" name="meta_info[field][]"> [+ add row]
[-删除行]
[+添加行]
我的第一个想法是创建两个文本字段(key/value),它们可以使用js复制(这不是问题),并在Submit上转换为json字符串,然后转换回Document类的setter方法中的数组。。但这看起来有点脏
我也在考虑嵌入表单(现在在sf2.1中嵌入文档效果很好!),但我不知道如何通过简单的键/值散列实现这一点(它也应该像mongodb中那样存储)
谢谢你的想法和方法 从Symfony表单的角度考虑,您可能希望有一个动态的内部表单,每个表单都有键和值输入字段。我想不出另一个实现来处理这种情况,因为您基本上通过使用散列字段来放弃任何模式的概念。这就是这种情况与ODM中的嵌入式文档(具有映射)的主要区别,尽管MongoDB将以相同的方式存储(嵌套对象) 一种替代实现是具有包含键和值属性的文档的嵌入关系。OpenSky在内部使用它来表示产品属性。它在MongoDB文档中消耗了更多的存储空间,因为您有一个包含
key
和value
字段的对象数组,而不是一个包含键/值对的对象,但有一些明显的好处:
- 可以映射该结构,这与您现有的ODM模式配合得很好
- 因为每个键/值对都有一个模型,所以用Symfony表单表示更自然
- 也许最重要的是,如果您要按此数据进行查询,您可以利用索引动态键和值,然后使用
查询进行键/值查找。如果您只是使用具有动态键的散列字段,那么就没有直接的方法来索引多个键(每个不同的字段路径都需要显式索引,或者在复合索引中显式提及)$elemMatch