测试用的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}"> {$svo.title}</option>
</if>
</volist>
本文介绍使用ThinkPHP实现HAS_MANY关联查询的方法,通过具体示例展示了如何将文章与其包含的多张图片进行关联,并提供了从数据库中获取这些关联数据的PHP代码。
2821

被折叠的 条评论
为什么被折叠?



