thinkphp 关联模型和视图模型的区别?

我一般多表联合查数据的话都是直接用join的,但是最近看手册和别人的项目,看到了“关联模型”,貌似都是同样能查数据的啊,而且比用join还费事点呢,所以问题出来了,想问一... 我一般多表联合查数据的话都是直接用join的,但是最近看手册和别人的项目,看到了“关联模型”,貌似都是同样能查数据的啊,而且比用join还费事点
呢,所以问题出来了,想问一下,什么情况下要用关联模型呢?是不是有视图模型解决不了的问题而关联模型可以呢?它们的区别又在哪里呢?求解
另外:
下面是我用join进行的多表联合查询,如果改成tp中的视图查询,model中的$viewFields又该怎么定义呢,控制器中该怎么调用呢?我看手册看的都晕了,好迷糊哦,求解,如果能把底下的改成tp的定义用法,再结合手册,我想我就明白了tp的视图模型了 ,谢谢

$A_con = $Article->field('fcym_article.*,fcym_article.name fe_name,fcym_author.name fr_name,fcym_article_class.name fs_name,fcym_article_type.name fpe_name') ->join('inner join fcym_author on fcym_article.auid = fcym_author.id') ->join('inner join fcym_article_class on fcym_article.classid = fcym_article_class.id') ->join('inner join fcym_article_type on fcym_article.typeid = fcym_article_type.id') ->order('id')

->limit($Page->firstRow,$Page->listRows)

->select();
展开
 我来答
jinlio
推荐于2017-11-25 · TA获得超过1459个赞
知道大有可为答主
回答量:1719
采纳率:0%
帮助的人:1506万
展开全部

先说下,关联模型。

 

如你所说,关联模型和jion类似。

实际上,thinkphp的关联模型,就是简化你的jion操作。所以,本质上,关联模型,就是处理表连接关系的。归根结底的,就是让你在用模型操作的时候,简化SQL查询的join操作。(是简化操作,而不是改变SQL语句。)

 

 

视图模型。

先举个例子。一个用户表,一个文章表。一个用户对应多篇文章。

 

然后,你现在会经常出现如下需求:取得某人的文章记录,但是呢,只要求显示,用户名,文章名,文章ID,文章日期(其他的,比如,什么用户邮箱啊,用户密码啊,文章类型啊,文章修改日期啊,文章标签啊,你都不需要)

 

这个时候,你就可以定义一个试图模型,然后在 $viewFields 里面,就可以把你经常使用需要调用的那个几个字段,按照thinkphp的规定,定义进去。

 

这样,经过定义之后,你每次操作的时候,就像是操作“单表”一样的,是不是就很方便了呢。

 

 

其实,这个视图的概念,是一般比较完善点的关系型数据库都支持的,比如mysql,MSSQL,ORACLE等等。可以参考下相关数据库的知识。

 

至于你的那个东西定义的可参考方式如下。

class ArticleViewModel extends ViewModel {
   public $viewFields = array(
     'Article'=>array('name','title'....其他字段),
     'Author'=>array('title'=>'category_name', '_on'=>'article.auid=author.id'),
     'Article_class'=>array(字段定义如上,具体规则,下面有介绍, '_on'=>上面已经给你写了一个,这里其实就是写,article,和article_class 的主外键,对应关系。即JOIN ....ON..语句,ON部分的多内容),
    'article_type'=>array('field_realename'=>'field_alias'。这里就相当于查询语句SELECT 字段  字段的别名。这样的对应关系。) 
   );
   
}

 

 

OK.受人之鱼不如授人之渔。上面没有给你详细答案,而是根据你的条件,给了你一个示例,希望你能研究透。

光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
tyua07
2013-07-23 · TA获得超过156个赞
知道小有建树答主
回答量:101
采纳率:100%
帮助的人:102万
展开全部
我来通俗的给你解释一下吧:

1、视图模型
比如你是一个文章管理的网站,你有2个表 一个是文章内容的表(表名:tp_article),一个是栏目的表(tp_category),你要查询栏目id=5的里面所有文章。这个时候就可以用到视图模型了,文章内容表里面你可以有一个字段 cid (ps:我只是这么举例)查询的条件就是tp_article.id = tp_category.cid。当然写法不是这么写,详细你用到的时候可以继续追问我,只是给你这么举例说明这个视图模型的用法,这样就能查出栏目id为5的文章内容页面表里面的所有数据了。

2、关联模型
按照字面上的解释,我想你也能大致了解这个模型的用途,关联模型我先给你说说有3种关联方式,才好继续下一步解说,一对一、 一对多、 多对多
例子:比如在你设计的网站 用到了会员模块,一个会员肯定就会设计多张表 举例:比如有发布的主题表,回复表,这样相对于主题表和会员对应的是 多对一这个概念,这里就可以用到关联模型的一对多,你就可以对会员管理,删除这个会员下面的所有主题,

最后,很多人都会对视图模型和关联模型什么时候该用有不懂的地方,当然我也是小白,我也是自学的,我也会遇到,我就会想,所以你能用什么模型做到的 你就用什么模型去做吧,我要是说错了,欢迎tp大神批评,我也是小白,要是没说错,就给我采纳吧,升级不容易啊,唉!!!!
追问
额……能说说区别不?有什么另一方做不到的呢?
追答
视图只可以查吧,关联可以很多操作,但是看了一下后盾网的视频 多对多的时候,就有问题了!其实你不必纠结与这些!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
圣鸾OJ
2015-09-29 · TA获得超过1629个赞
知道小有建树答主
回答量:1136
采纳率:96%
帮助的人:108万
展开全部
我来通俗的给你解释一下吧:

1、视图模型
比如你是一个文章管理的网站,你有2个表 一个是文章内容的表(表名:tp_article),一个是栏目的表(tp_category),你要查询栏目id=5的里面所有文章。这个时候就可以用到视图模型了,文章内容表里面你可以有一个字段 cid (ps:我只是这么举例)查询的条件就是tp_article.id = tp_category.cid。当然写法不是这么写,详细你用到的时候可以继续追问我,只是给你这么举例说明这个视图模型的用法,这样就能查出栏目id为5的文章内容页面表里面的所有数据了。

2、关联模型
按照字面上的解释,我想你也能大致了解这个模型的用途,关联模型我先给你说说有3种关联方式,才好继续下一步解说,一对一、 一对多、 多对多
例子:比如在你设计的网站 用到了会员模块,一个会员肯定就会设计多张表 举例:比如有发布的主题表,回复表,这样相对于主题表和会员对应的是 多对一这个概念,这里就可以用到关联模型的一对多,你就可以对会员管理,删除这个会员下面的所有主题,

最后,很多人都会对视图模型和关联模型什么时候该用有不懂的地方,当然我也是小白,我也是自学的,我也会遇到,我就会想,所以你能用什么模型做到的 你就用什么模型去做吧,我要是说错了,欢迎tp大神批评,我也是小白,要是没说错,就给我采纳吧,升级不容易啊,唉!!!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式