ThinkPHP框架--关联查询--HAS_MANY--小demo

来源:互联网 发布:linux中的grep命令 编辑:程序博客网 时间:2024/06/05 05:44

测试用的ThinkPHP版本是3.1.3,PHP版本是5.3.3
一、HAS_MANY 关联表示当前模型拥有多个子对象,例如每个用户有多篇文章,我们可以这样来定义:
‘Article’=> HAS_MANY
完整定义方式为:
‘Article’=> array(
‘mapping_type’=>HAS_MANY,
‘class_name’=>’Article’,
‘foreign_key’=>’userId’,
‘mapping_name’=>’articles’,
‘mapping_order’=>’create_time desc’,
// 定义更多的关联属性
……
),
其他内容,可以查看手册…,现在有两个数据表,如下所示。
数据表一:【文章表】

CREATE TABLE `sh_article` (  `article_id` int(10) unsigned NOT NULL auto_increment COMMENT '文章表主键ID',  `special_id` int(11) default NULL COMMENT '所属专题ID',  `article_title` varchar(50) NOT NULL COMMENT '文章标题',  `article_author` varchar(20) NOT NULL COMMENT '文章作者',  `aiticle_copyFrom` varchar(50) default NULL COMMENT '转载自',  `aiticle_editor` varchar(20) NOT NULL default '上海市农业科学院成果转化平台' COMMENT '文章录入员',  `aiticle_key` varchar(50) default NULL COMMENT '关键字',  `aiticle_hits` int(11) NOT NULL default '0' COMMENT '点击次数',  `aiticle_updateTime` int(10) NOT NULL default '0' COMMENT '更新时间',  `aiticle_Hot` tinyint(1) default '0' COMMENT '是否是热点文章',  `aiticle_onTop` tinyint(1) default '0' COMMENT '是否置顶',  `aiticle_content` text NOT NULL COMMENT '文章内容',  `aiticle_defPic` varchar(50) NOT NULL COMMENT '首页默认图片',  `aiticle_uploadUrl` varchar(50) NOT NULL COMMENT '上传地址',  PRIMARY KEY  (`article_id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

插入数据

insert  into `sh_article`(`article_id`,`special_id`,`article_title`,`article_author`,`aiticle_copyFrom`,`aiticle_editor`,`aiticle_key`,`aiticle_hits`,`aiticle_updateTime`,`aiticle_Hot`,`aiticle_onTop`,`aiticle_content`,`aiticle_defPic`,`aiticle_uploadUrl`) values (1,NULL,'文章标题1','文章作者1',NULL,'上海市农业科学院成果转化平台',NULL,0,0,0,0,'文章内容1','图片1','1');

数据表二:【文章表】内含的【图片表】

CREATE TABLE `sh_article_pic` (  `article_pic_id` int(10) unsigned NOT NULL auto_increment COMMENT '文章图片表主键ID',  `article_id` int(11) NOT NULL COMMENT '文章表主键ID',  `aiticle_pic` varchar(50) NOT NULL COMMENT '图片',  PRIMARY KEY  (`article_pic_id`)) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

插入数据

insert  into `sh_article_pic`(`article_pic_id`,`article_id`,`aiticle_pic`) values (1,1,'图片1'),(2,1,'图片2'),(3,1,'图片3'),(4,2,'图片1');

先看流程图:
这里写图片描述
第一步的代码:

<?php class KnowledgeAction extends Action {    public function index(){    $User = D("Article");    $user = $User->relation(true)->select();    //dump($user);    echo "<pre>";    print_r($user);    }}

第二步的代码:

<?php    class ArticleModel extends RelationModel{//继承ReletionModel类    protected $_link = array(        'Article'=>array(        'mapping_type'=>HAS_MANY, //关联类型,一对多        'mapping_name'=>'node', //关联的映射名称,就是关联出来的数组的键值,见说明1.        'class_name'=>'Article_pic', //关联数据库,即图片库        //'mapping_order'=>'sort',        //'parent_key'=>'article_id',//自引用关联的关联字段        //'foreign_key'=>'article_id',        ),    );}

说明1:
这里写图片描述
模板部分:

<volist name="alist" id="vo">    //第一层数据    <if condition="$vo.level eq '1'">    <option value="{$vo.id}">{$vo.title}</option>        //第二层数据        <elseif condition="$vo.level eq '2'" />        <option value="{$vo.id}">{$vo.title}</option>        //第三层数据        <volist name="vo.node" id="svo">        <option value="{$svo.id}">&nbsp;&nbsp;&nbsp;&nbsp;{$svo.title}</option>   </if></volist>
0 0
原创粉丝点击