RelateAction
<?php
/**
* ThinkPHP中的
* 一对一:
* 有:HAS.ONE 属于:BELONGS.TO
* 一对多:
* 有:HAS.MANY 属于:BELONGS.TO
* 多对多:
* MANY.TO.MANY
*
* 如果加入关联需要加入relation方法并将其设为true
* 同时Model需要继承RelationModel
*/
class RelateAction extends Action{
public function index(){
$user=D('User');
//HAS_ONE和HAS_MANY
//1.查询
//如果加入关联需要加入relation方法并将其设为true
//同时Model需要继承RelationModel
// $list=$user->relation(true)->select();
//2.插入
// $data['username']='student';
// $data['password']='student';
// $data['card']=array(
// array('cardname'=>'student1'),
// array('cardname'=>'student2'),
// );
// $list=$user->relation(true)->add($data);
//3.更新
// $data['username']='user';
// $data['password']='user';
// $data['card']=array(
// //作更新的时候,需要加入需要更新的card对应的id
// array('id'=>1,'cardname'=>'修改1'),
// array('id'=>2,'cardname'=>'修改2'),
// );
// $list=$user->relation(true)->where('id=1')->save($data);
//4.删除
// $list=$user->relation(true)->delete('23');
dump($list);
}
public function belongs(){
$card=D('Card');
$list=$card->relation(true)->select();
dump($list);
}
}
?>
HAS关系:(主要看$link的设置)
<?php
class UserModel extends RelationModel {
//参数:
//1.验证字段(表单中的名称或者辅助字段例如验证码)
//2.验证规则(结合附加规则一起使用)
//3.错误提醒
//4.验证条件(0:1:2:)最好是选择手册中的常量来填写
//5.附加规则;验证方式:regex;function名;callback;confirm(验证两个字段是否相同);equal;in;unique;
// 常用规则:require:必须存在;email邮箱;url;currency货币;number;
//6.验证时间
// 是指数据库进行数据库操作时的验证时机(增加数据时,编辑时,全部清空下验证)
// Model::MODEL_INSERT
// Model::MODEL_UPDATE
// Model::MODEL_BOTH
//自动验证开始
protected $_validate = array (//在模型中添加国际化
array ('username', 'require', '<!--{%usernamenull}-->', 0, 0, 1 ), array ('username', 'checklen', '用户名长度不合法', 0, 'callback', 3 ), array ('password', 'require', '用户名必填', 0, 0, 1 ), array ('repassword', 'require', '用户名必填', 0, 0, 1 ), array ('password', 'repassword', '密码不一致', 0, 'confirm', 1 ) )// array('createip','email','邮箱格式不对',0,'regex',1),
;
//可以设置多个关联
protected $_link = array (
//'condition'
//foreign_key
//mapping_fields 需要关联的字段
//as_fields
'card' => array (
//HAS_ONE其他的只是修改关系;
//HAS_MANY:多了mapping_limit、mapping_order、parent_key(自引用关联的字段,默认为parent_id)
'mapping_type' => HAS_MANY,
'class_name' => 'card',
'mapping_name' => 'card',
'foreign_key' => 'uid' ,
'mapping_fields' => array('id','uid','cardname'),
// 'mapping_fields' => 'id,uid,cardname',
//默认是card是属于user之下的,查询出来是一个二维数组;as_fields可以将想显示的字段放入到一维数组当中
'as_fields' => 'id:usid,cardname',
)
);
public function checklen($data) {
if (strlen ( $data ) > 15 || strlen ( $data ) < 5)
return FALSE;
return true;
}
function modelTest() {
echo '测试的跨模型操作,调用模型中的方法';
}
}
?>
Belongs(属于关系,操作字表)
<?php
class CardModel extends RelationModel {
//可以设置多个关联;多个'' => array();
protected $_link = array (
'user' => array (
'mapping_type' => BELONGS_TO,
//card本身的uid
'foreign_key' => 'uid' ,
)
);
}
?>