关联[2]

HAS_MANY 关联表示当前模型拥有多个子对象

user数据表中的用户可以发布多条留言,创建了think_content数据表,

其中uid用来关联user中的id

在 WeiBo/Home/Controller/UserController.class.php 中代码为:

 1 <?php
 2 namespace Home\Controller;
 3 use Think\Controller;
 4 use Home\Model\UserModel;
 5 
 6 class UserController extends Controller {
 7     public function index() {        
 8         $user = D('User');
 9         $arr = $user->relation(true)->select();
10         print_r($arr);
11     }
12  }

在 WeiBo/Home/User/Model/UserModel.class.php 中的代码如下:

 1 <?php
 2 namespace Home\Model;
 3 use Think\Model;
 4 use Think\Model\RelationModel;
 5 
 6 class UserModel extends RelationModel {
 7     protected $_link = array(
 8        'Content'=>array(
 9             'mapping_type'=>self::HAS_MANY,
10             'mapping_name'=>'contents',
11             'class_name'=>'content',
12             'foreign_key' =>'uid',
13             'mapping_fields'=>'content',
14             'mapping_limit'=>'0,2',
15             'mapping_order'=>'id DESC',
16             ),
17     );    
18 }

得到的数据为:

后面还有数据未全部显示。

 

用户表和留言表:BELONGS_TO(多对一)表示 N 条留言从属于某个用户。

新建数据表think_role,用来表示user表中用户的权限:

新建think_group用来连接user和role表,uid用来指代user中的id对应的用户,gid用来指代role表中的权限:

在 WeiBo/Home/Controller/UserController.class.php 中代码为:

 1 <?php
 2 namespace Home\Controller;
 3 use Think\Controller;
 4 use Home\Model\UserModel;
 5 
 6 class UserController extends Controller {
 7     public function index() {        
 8         $user = D('User');
 9         $arr = $user->relation(true)->select();
10         print_r($arr);
11     }
12  }

在 WeiBo/Home/User/Model/UserModel.class.php 中代码为:

 1 <?php
 2 namespace Home\Model;
 3 use Think\Model;
 4 use Think\Model\RelationModel;
 5 
 6 class UserModel extends RelationModel {
 7     protected $_link = array(
 8        'Role'=>array(
 9             'mapping_type'=>self::MANY_TO_MANY,
10             'relation_table'=>'think_group',
11             'foreign_key' =>'uid',
12              'relation_foreign_key'=>'gid',
13          ),
14     );    
15 }

这时得到的数据为:

 

即两个数据表关联起来了,后面还有三组数据没列出来。

 

关联也可以向其它数据表的数据进行增删改查,我们使用user和card两个表

user表:

card表

 WeiBo/Home/User/Model/UserModel.class.php 中代码进行关联:

 1 namespace Home\Model;
 2 use Think\Model;
 3 use Think\Model\RelationModel;
 4 
 5 class UserModel extends RelationModel {
 6     protected $_link = array(
 7        'Card'=>array(
 8             'mapping_type'=>self::HAS_ONE,
 9             'foreign_key' =>'uid',
10                 'mapping_fields'=>'code',
11                 ),
12     );    
13 }

 WeiBo/Home/Controller/UserController.class.php 中的代码进行增删改查操作:

 1 <?php
 2 namespace Home\Controller;
 3 use Think\Controller;
 4 use Home\Model\UserModel;
 5 
 6 class UserController extends Controller {
 7     public function index() {        
 8         $user = D('User');
 9         $arr = $user->relation(true)->select();
10         print_r($arr);
11     }
12   public function add() {
13         $user=D('User');
14         $data['user']='测试用户';
15         $data['email']='test@163.com';
16         $data['Card']=array(
17             'code'=>'3209xx',
18             );
19         $user->relation(true)->add($data);
20     }
21     public function delete() {
22         $user=D('User');
23         $user->relation(true)->delete(16);
24     }
25     public function update() {
26         $user=D('User');
27         $data['user']='测试用户54';
28         $data['email']='test@163.com';
29         $data['Card']=array(
30             'code'=>'3909zz',
31             );
32         $user->relation(true)->where(array('id'=>20))->save($data);
33     }
34  }

 

posted @ 2015-07-01 17:17  todaytoday  阅读(193)  评论(0编辑  收藏  举报