没有用关联模型和视图模型的时候 D('user') 有很多方法 select find count sum .... 你用了关联或者视图 这些方法就需要注意
先来说关联模型
关联模型那些个类型其实分类不严谨,比如:BELONGS_TO,我看到过一个帖子说这个问题的。现在有一个文章表,文章分类表,在文章表里面写关联,文章表相对于分类表 是什么关系?你要回答是 一对一 那就错了 那是多对一 BELONGS_TO 类似于下面的图

这个问题那个帖子的争吵很激烈,最后决定 我foreach来查询每篇文章的分类吧。。。
再就是 一对多的关系
每篇文章都有收藏或者评论啥的
文章表 关联 收藏表
这个用 HAS_MANY 没问题吧?
可是你想过没有?如果收藏数量特别大呢?或者说你想要的仅仅是获取收藏的总数 count() 怎们写?
这个时候的关联关系到底是什么?答案是 HAS_ONE
别不相信 我还真能查出来 关联总数 前几天我发过帖子 没有人回答我怎么查处关联的总数

类似与这样子,指定 'mapping_fields'=> 'count(*) as count',
就能查出来总数
不过他这个在一个数组里面 不能直接反应到 文章表的字段上
这两个例子表明 官方定义的这些所以的 HAS_ONE HAS_MANY 根本就不严谨
可以这么理解
HAS_ONE 其实就是查一条数据 find
HAS_MANY 其实就是查多条数据 select
其实关联模型 应该还有要提升的地方
比如无限极关联 现在这个仅仅是二级关联 比如商品 商品分类本来就是一个无限极的分类 你关联一下商品分类 只是会关联到他的分类 那个顶级分类 啥的关联不到
我今天寻思着 把关联模型实现的东西 用视图模型实现一下
太出乎我的意料了 奉劝大家尽量用关联模型
因为视图 其实就是在组装sql 那个过程很痛苦
官方文档里面写到的 比如我上面的 获取这篇文档的收藏总数
'Category'=>array('ti
这段是我直接复制手册里面的 这样子 仅仅适合查一个 比如你实在商品内容页面 你肯定用 find 方法查询的 这个没问题 但是你如果是在商品列表页面 你通过 select 方法 查询 这里就没有筛选条件 查出来的是总数 而不是单个文章的收藏数量 select 本来就是多条查询 然后我这样子写了一下 就没问题了

但是与其这个痛苦的组装sql 我为什么不用关联模型 但是这个有个好处 就是查来的收藏总数 会直接反映到 文章的字段上 而不是 array['collect_count']
我搞了一下午
弄出来一个关联方法
下图

就是把模型里面的方法用 extra 关联起来 find 和 select的时候就会调用方法 并且把返回的信息 映射到 主表的字段上面去



支持连贯操作和 多次调用
ExtraModel.class.rar
( 1.01 KB 下载:37 次 )
最佳答案
