ecmall源码简略分析----数据库关系模型的实现

上传人:xzh****18 文档编号:44573602 上传时间:2018-06-14 格式:PDF 页数:9 大小:62.07KB
返回 下载 相关 举报
ecmall源码简略分析----数据库关系模型的实现_第1页
第1页 / 共9页
ecmall源码简略分析----数据库关系模型的实现_第2页
第2页 / 共9页
ecmall源码简略分析----数据库关系模型的实现_第3页
第3页 / 共9页
ecmall源码简略分析----数据库关系模型的实现_第4页
第4页 / 共9页
ecmall源码简略分析----数据库关系模型的实现_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《ecmall源码简略分析----数据库关系模型的实现》由会员分享,可在线阅读,更多相关《ecmall源码简略分析----数据库关系模型的实现(9页珍藏版)》请在金锄头文库上搜索。

1、对于数据库关系模型的分析,我觉得需要从两个函数说起: 1. /获取一个模型 2. function 5. $model_hash = md5($model_name . var_export($params, true); 6. if ($is_new | !isset($models$model_hash) 7. 8. $model_file = ROOT_PATH . /includes/models/ . $model_name . 9. .model.php; 10. if (!is_file($model_file) 11. 12. /* 不存在该文件,则无法获取模型 */ 13.

2、return false; 14. 15. include_once($model_file); 16. $model_name = ucfirst($model_name) . Model; 17. if ($is_new) 18. 19. return new $model_name($params, db(); 20. 21. $models$model_hash = new $model_name($params, db(); 22. 23. return $models$model_hash; 24. 25. /获取一个业务模型 26. function 29. $model_has

3、h = md5($model_name . var_export($params, true); 30. if ($is_new | !isset($models$model_hash) 31. 32. $model_file = ROOT_PATH . /includes/models/ . $model_name . 33. .model.php; 34. if (!is_file($model_file) 35. 36. /* 不存在该文件,则无法获取模型 */ 37. return false; 38. 39. include_once($model_file); 40. $model

4、_name = ucfirst($model_name) . BModel; 41. if ($is_new) 42. 43. return new $model_name($params, db(); 44. 45. $models$model_hash = new $model_name($params, db(); 46. 47. return $models$model_hash; 48. 所谓模型,则是一个一个的数据实体,换句话说就是一个数据表,你可以基于这个模 型,调用 model.base.php 中的数据库操作函数来对数据进行增、删、改、查的操作。 这里的业务模型,是在实体模型

5、基础上,再继承一次,然后对一些方法进行重写。 系统中只有三个实体有业务模型: 推荐类型 recommend;商品数据模型 goods;商品分类业务模型 gcategory; 具体操作例子: /物品表的操作: $model_goods = $goods_info = $model_goods-get($goods_id); 这里需要解释一下对于数据模型的操作是 怎样的一个函数调用过程: 首先:$model_goods = 我们看一下 4. var $prikey = goods_id; 5. var $alias = g;/缩写 6. var $_name = goods; 7. var $te

6、mp; / 临时变量 8. var $_relation = array( 9. / 一个商品对应一条商品统计记录 10. has_goodsstatistics = array( 11. model = goodsstatistics, 12. type = HAS_ONE, 13. foreign_key = goods_id, 14. dependent = true 15. ), 16. / 一个商品对应多个规格 17. has_goodsspec = array( 18. model = goodsspec, 19. type = HAS_MANY, 20. foreign_key

7、= goods_id, 21. dependent = true 22. ), 23. / 一个商品对应一个默认规格 24. has_default_spec = array( 25. model = goodsspec, 26. type = HAS_ONE, 27. refer_key = default_spec, 28. foreign_key = spec_id, 29. ), 30. / 一个商品对应多个属性 31. has_goodsattr = array( 32. model = goodsattr, 33. type = HAS_MANY, 34. foreign_key

8、= goods_id, 35. dependent = true 36. ), 37. / 一个商品对应多个图片 38. has_goodsimage = array( 39. model = goodsimage, 40. type = HAS_MANY, 41. foreign_key = goods_id, 42. dependent = true 43. ), 44. / 一个商品只能属于一个店铺 45. belongs_to_store = array( 46. model = store, 47. type = BELONGS_TO, 48. foreign_key = store

9、_id, 49. reverse = has_goods, 50. ), 51. / 商品和分类是多对多的关系 52. belongs_to_gcategory = array( 53. model = gcategory, 54. type = HAS_AND_BELONGS_TO_MANY, 55. middle_table = category_goods, 56. foreign_key = goods_id, 57. reverse = has_goods, 58. ), 59. / 商品和会员是多对多的关系(会员收藏商品) 60. be_collect = array( 61. m

10、odel = member, 62. type = HAS_AND_BELONGS_TO_MANY, 63. middle_table = collect, 64. foreign_key = item_id, 65. ext_limit = array(type = goods), 66. reverse = collect_goods, 67. ), 68. / 商品和推荐类型是多对多的关系 todo 69. be_recommend = array( 70. model = recommend, 71. type = HAS_AND_BELONGS_TO_MANY, 72. middle

11、_table = recommended_goods, 73. foreign_key = goods_id, 74. reverse = recommend_goods, 75. ), 76. ); 77. var $_autov = array( 78. goods_name = array( 79. required = true, 80. filter = trim, 81. ), 82. ); 83. 这里贴出了实体 goods 模型类中的内容, 先是表格的属性, 再就是 goods 与其它实体之间的 关联关系的定义。然后我们再看看这个函数,它是 BaseModel 构造函数里调用的

12、方法,对对 象中的基础变量进行初使化: 1. function BaseModel($params, $db) 2. 3. $this- db = 4. !$this- alias 5. $this- _prefix = DB_PREFIX; 6. $this- table = $this- _prefix . $this- table; 7. if (!emptyempty($params) 8. 9. foreach ($params as $key = $value) 10. 11. $this- $key = $value; 12. 13. 14. 大家已经看出$_relation 中

13、间是此实体的关联信息,然后在 BaseModel 类中的一个函数: 1. function _getJoinString($relation_info) 2. 3. switch ($relation_infotype) 4. 5. case HAS_ONE:/ 6. $model = 7. /* 联合限制 */ 8. $ext_limit = ; 9. $relation_infoext_limit 10. /* 获取参考键,默认是本表主键(直接拥有),否则为间接拥有 */ 11. $refer_key = isset($relation_inforefer_key) ? $relation

14、_inforefer_key : $this- prikey; 12. /* 本表参考键=外表外键 */ 13. return “ LEFT JOIN $model- table $model- alias ON $this- alias.$refer_key=$model- alias.$relation_infoforeign_key$ext_limit“; 14. break; 15. case BELONGS_TO: 16. /* 属于关系与拥有是一个反向的关系 */ 17. $model = 18. $be_related = $model- getRelation($relation_inforeverse); 19. if (emptyempty($be_related) 20. 21. /* 没有找到反向关系 */ 22. $this- _error(no_reverse_be_found, $relation_infomodel); 23. return ; 24. 25. $ext_limit = ; 26. !emptyempty($relation_infoext_limit) 27. /* 获取参考键,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号