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

本文介绍使用ThinkPHP实现HAS_MANY关联查询的方法,通过具体示例展示了如何将文章与其包含的多张图片进行关联,并提供了从数据库中获取这些关联数据的PHP代码。

测试用的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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值