日期:2014-05-16 浏览次数:20390 次
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); } } ?>
<?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 '测试的跨模型操作,调用模型中的方法'; } } ?>
<?php class CardModel extends RelationModel { //可以设置多个关联;多个'' => array(); protected $_link = array ( 'user' => array ( 'mapping_type' => BELONGS_TO, //card本身的uid 'foreign_key' => 'uid' , ) ); } ?>