ThinkPHP--关联模型

关联模型可以操作多种 关联表的     增、删、改、查。

一.模型简介 

关联模型,有三种模式。

一对一:ONE_TO_ONE,包括 HAS_ONE 和 BELONGS_TO;

 一对多:ONE_TO_MANY,包括 HAS_MANY 和 BELONGS_TO;

多对多:MANY_TO_MANY。 


一对一:用户表和身份证表,一个用户只能对应一个身份证,而一个身份证只能对应一 个用户。这就是一对一。

一对多:用户表和留言表:一个用户可以发表 N 条留言,而每条留言只能由某一个用户 发表。这就是一对多

多对多:用户表和角色表:一个用户可以是认证专员,同时也是审核专员

添加数据表think_card

ThinkPHP--关联模型_第1张图片

ThinkPHP--关联模型_第2张图片


我的表结构可能出错了  但不影响;


二.关联操作 

用户显示身份证

//User 控制器部分 

namespace Home\Controller; 

use Think\Controller;

 use Home\Model\UserModel;

class UserController extends Controller {

 public function index() { $user = D('User'); 

$arr = $user->relation('card')->select(); 

var_dump($arr); 

}

 }

//访问可以得到所以user数据


//UserModel.class.php

 namespace Home\Model; 

use Think\Model;

use Think\Model\RelationModel;   //关联模型


class UserModel extends RelationModel { 

protected $_link = array( 

'Card'=>array(

'mapping_type'=>self:: HAS_ONE ,

// 'class_name'=>'Card', 

//'mapping_name'=>'card',

 'foreign_key'=>'uid', 

'mapping_fields'=>'code',

 'as_fields'=>'code', 

//'condition'=>'id=1',

     ),

  ); 

}

  身份证显示用户

建立CardController.class.php  //与user控制平级


//Card控制器部

namespace Home\Controller; 
use Think\Controller;
 use Home\Model\CardModel;
class CardController extends Controller { 
public function index() {
 $card = D('Card');
 $arr = $card->relation(true)->select(); 
var_dump($arr);
 } 
}

 创建模型CardModel.class.php

 
namespace Home\Model;
use Think\Model; use Think\Model\RelationModel; //继承

class CardModel extends RelationModel {

protected $_link = array(
 'User'=>array( 'mapping_type'=>self::BELONGS_TO,
 'foreign_key'=>'uid', 
'mapping_fields'=>'user', 
'as_fields'=>'user',
), 
);

}

用户表对留言表 (1对多)

创建表contert

表的结构 `think_content`
--


CREATE TABLE IF NOT EXISTS `think_content` (
  `id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
  `content` text,
  `uid` smallint(6) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;


--
-- 转存表中的数据 `think_content`
--


INSERT INTO `think_content` (`id`, `content`, `uid`) VALUES
(1, '我的第一条留言', 1),
(2, '我的第二条留言', 1),
(3, '我的第三条留言', 1);


-- 




UserControler.class.php

namespace Home\Controller; 

use Think\Controller;

 use Home\Model\UserModel;

class UserController extends Controller {

 public function index() { $user = D('User'); 

$arr = $user->relation(tuer)->select(); 

print_r($arr); 

}

 }

 UserModel.class.php


 namespace Home\Model; 

use Think\Model;


use Think\Model\RelationModel;   //关联模型



class UserModel extends RelationModel { 

protected $_link = array( 

'Content' => array(
            'mapping_type'=>self::HAS_MANY,
            'foreign_key'=>'uid',
            'class_name'=>'Content',
            'mapping_name'=>'contents',
            'mapping_fields'=>'content',//只显示content
            'mapping_limit'=>'0,2',//只显示两条
            'mapping_order'=>'id DESC',//倒序显示两条

     ),

  ); 

}

反过来          n条留言从属一个用户:

ContentController.class.php

relation(true)->select();
         print_r($arr);
     } 
}


ContentModel.class.php

array(
            'mapping_type'=>self::BELONGS_TO,
            'foreign_key'=>'uid',
            'mapping_fields'=>'user',
             'as_fields'=>'user',
            
        ),
        
    );
    
}


用户表 user和角色表role 、中间表group 实现关联   :  MANY__TO__MANY


- 表的结构 `think_group`
--


CREATE TABLE IF NOT EXISTS `think_group` (
  `uid` smallint(6) unsigned DEFAULT NULL,
  `gid` smallint(6) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


--
-- 转存表中的数据 `think_group`
--


INSERT INTO `think_group` (`uid`, `gid`) VALUES
(1, 1),
(1, 2),
(1, 3),
(2, 2),
(2, 3),
(3, 3);


-- --------------------------------------------------------


--
-- 表的结构 `think_role`
--


CREATE TABLE IF NOT EXISTS `think_role` (
  `id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;


--
-- 转存表中的数据 `think_role`
--


INSERT INTO `think_role` (`id`, `title`) VALUES
(1, '管理员'),
(2, '认证专员'),
(3, '审核专员');


-- ---


UserControler.class.php

namespace Home\Controller; 

use Think\Controller;

 use Home\Model\UserModel;

class UserController extends Controller {

 public function index() { $user = D('User'); 

$arr = $user->relation(tuer)->select(); 

print_r($arr); 

}

 }

UserModel.class.php

array(
             'mapping_type'=>self:: MANY_TO_MANY ,
             'foreign_key'=>'uid', //中间表关联id
            'relation_foreign_key'=>'gid',//关联角色表gid
           'relation_table'=>'think_group',//中间表
           
    ),
 );   
} 

之后可以进行表与表之间的管理   更新 添加 删除。

UserController.class.php


relation(true)->select();
       print_r($arr);
       
       
        
         }
         public function add(){
             //新增一个用户,同时增加一个身份证
             $user = D('User'); 
             $data['user'] = '5555';
              $data['email'] = '[email protected]';
               $data['Card'] = array( 'code' => '123456', );
                $user->relation(true)->add($data);
             }
             
             //删除一个用户,同时删除关联的身份证
             public function delete(){
                
                 $user = D('User');
                  $user->relation(true)->delete(9
                      );
                          
             }
             
             //更新一个用户,同时更新对应的身份证
             public function save() {
                 $user = D('User'); 
                 $data['user'] = '789';
                  $data['email'] = '[email protected]';
                   $data['Card'] = array( 'code'=>'6666666', );
                    $user->relation(true)->where(array('id'=>10))->save($data);
              }




你可能感兴趣的:(thinkphp)