关联[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 }