Doctrine ODM embedOne different document
来源:互联网 发布:数据分析面试题 编辑:程序博客网 时间:2024/05/21 00:00
在使用doctrine\odm 的embedOne标注时,要定义targetDocument,在此之前我在使用此标注时都是只嵌入一种类型的嵌入文档,在保存不同文档时,是将此属性定义为hash类
/*** @ODM\Hash*/protected $desc;
这样使用的问题是desc里面只能存简单数据类型,不能存数组、对象值,所以我重新查看了doctrine的文档,找到了继承映射的定义inheritance Maps.
因此在同样的问题上,使用embedOne给类属性嵌入不同类型的文档,可以将targetDocument定义为基础类,而所需嵌入的文档类继承自基础类,如下所示。
/*** @ODM\EmbeddedDocument* @ODM\InheritanceType("SINGLE_COLLECTION")* @ODM\DiscriminatorField("type")* @ODM\DiscriminatorMap({"type1"="type1Class"})*/class BaseClass{}/*** @ODM\EmbeddedDocument*/class type1Class { /** * @ODM\String */ public $type = 'type1';}
从上面代码可以知道
1. 在定义基础类时要定义继承类型,odm 提供了两种类型,一种如上,一种是COLLECTION_PER_CLASS
,两种定义的不同点是嵌入文档的存储位置,第二种是将各个文档都存在自己的集合中,并且也不用设置Discriminator
定义,不用存在同一个集合内,也不需要映射查找了;
2. DiscriminatorField
是定义区分不同嵌入文档的标志,由自己定义,在每个继承类中都要包含此属性
3. DiscriminatorMap
定义了type到文档类的映射关系,doctrine根据此映射关系,找到要存储的文档,从而实现嵌入不同文档在同一个属性值内
1 0
- Doctrine ODM embedOne different document
- ODM
- 对象文件映射(ODM (Object-Document Mapper))
- Different types of sales document
- Doctrine Annotations
- Doctrine 缓存
- 安装doctrine
- OEM ODM
- different
- Doctrine查询方法
- 数据库和Doctrine
- Doctrine中的annotation
- zendframework2 安装 doctrine
- ORM doctrine的使用
- Doctrine 2 ORM 事务处理
- doctrine安装配置
- doctrine配置安装
- Doctrine 2 ORM 事务处理
- Git的使用教程(六)管理修改
- 避开WebForm天坑,拥抱ASP.Net MVC吧
- 如何设置Android中控件的颜色透明度
- Coursera公开课笔记: 斯坦福大学机器学习第七课“正则化(Regularization)”
- PullToRefreshListView onItemLongClick 事件失效
- Doctrine ODM embedOne different document
- 当数据库id有断层的情况下做上一篇和下一篇时的处理方式SQL语句。
- Android PullToRefresh 完全解析
- 用数组的形式分解UILabel的每行文字
- 百度统计及SEO
- 静态内部类
- maven 项目没有自动编译项目
- HTML5 Now: 深入了解HPolyfills
- Provisional headers are shown图片加载不出