您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
thinkphp3.2.1学习笔记-关联模型[下]
发布时间:2017-09-19 12:05:07编辑:雪饮阅读()
关联模型-一对多与多对一:
用到的数据表如:
content:
一对多:
示例:显示用户列表并关联用户留言
user控制器:
<?php
// 本类由系统自动生成,仅供测试用途
namespace Home\Controller;
use Think\Controller;
use Home\UserModel;
class UserController extends Controller {
public function index(){
$user=D('User');
$arr=$user->relation(true)->select();
echo "<pre>";
print_r($arr);
echo "</pre>";
}
}
user模型:
<?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',
//只显示每个用户的2条留言
'mapping_limit'=>'0,2',
//用户留言数组按id降序排列
'mapping_order'=>'id Desc',
),
);
}
?>
多对一:
示例:显示留言列表,多个留言对应同一个用户
content控制器:
<?php
// 本类由系统自动生成,仅供测试用途
namespace Home\Controller;
use Think\Controller;
use Home\ContentModel;
class ContentController extends Controller {
public function index(){
$content=D('Content');
$arr=$content->relation(true)->select();
echo "<pre>";
print_r($arr);
echo "</pre>";
}
}
content模型:
<?php
namespace Home\Model;
use Think\Model;
use Think\Model\RelationModel;
class ContentModel extends RelationModel{
protected $_link=array(
'User'=>array(
'mapping_type'=>self::BELONGS_TO,
'foreign_key'=>'uid',
'mapping_fields'=>'name',
'as_fields'=>'name',
),
);
}
关联模型-多对多:
示例:一个用户可以有多个角色(属于多个分组),一个角色(分组)可以有多个用户
用到的数据表:
role:
group:
user控制器:
<?php
// 本类由系统自动生成,仅供测试用途
namespace Home\Controller;
use Think\Controller;
use Home\UserModel;
class UserController extends Controller {
public function index(){
$user=D('User');
$arr=$user->relation(true)->select();
echo "<pre>";
print_r($arr);
echo "</pre>";
}
}
user模型:
<?php
namespace Home\Model;
use Think\Model;
use Think\Model\RelationModel;
class UserModel extends RelationModel{
protected $_link=array(
'Role'=>array(
//映射关系为多对多
'mapping_type'=>self::MANY_TO_MANY,
//设置多对多的中间表
'relation_table'=>'think_group',
//设置多对多的中间表对左表关联的字段名
'foreign_key'=>'uid',
//设置多对多的中间表对右表关联的字段名
'relation_foreign_key'=>'gid',
),
);
}
?>
这样在输出的结构化数组数据中从不同角度(从左向右或从右向左)来看就形成了多对多的关系。
关联模型-增删改:
以一对一关联模型HAS_ONE为例进行关联增删改
增:
user控制器:
<?php
// 本类由系统自动生成,仅供测试用途
namespace Home\Controller;
use Think\Controller;
use Home\UserModel;
class UserController extends Controller {
public function index(){
$user=D('User');
$data['name']='测试用户1';
$data['Card']=array(
'code'=>'3209xx',
);
$user->relation(true)->add($data);
}
}
user模型:
<?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,
'foreign_key'=>'uid',
'mapping_fields'=>'code',
'as_fields'=>'code',
),
);
}
?>
删:
控制器中新增del方法:
public function del(){
$user=D('User');
$user->relation(true)->delete(17);
}
改:
控制器中新增save方法:
public function save(){
$user=D('User');
$data['name']='测试用户220807';
$data['Card']=array(
'code'=>'test220807',
);
$user->relation(true)->where(array('id'=>18))->save($data);
}
关键字词:thinkphp3.2.1,模型