Home >Backend Development >PHP Tutorial >onethink中的一个数据库联结问题
onethink的Admin/Article/getDocumentList()方法;
我直接把代码粘上来了
<code>protected function getDocumentList($cate_id=0,$model_id=null,$position=null,$field=true,$group_id=null){ /* 查询条件初始化 */ $map = array(); if(isset($_GET['title'])){ $map['title'] = array('like', '%'.(string)I('title').'%'); } if(isset($_GET['status'])){ $map['status'] = I('status'); $status = $map['status']; }else{ $status = null; $map['status'] = array('in', '0,1,2'); } if ( isset($_GET['start']) ) { $map['update_time'][] = array('egt',strtotime(I('start'))); } if ( isset($_GET['end']) ) { $map['update_time'][] = array('elt',24*60*60 + strtotime(I('end'))); } if ( isset($_GET['nickname']) ) { $map['uid'] = M('Member')->where(array('nickname'=>I('nickname')))->getField('uid'); } if(!is_administrator(UID)){ $map["uid"] = UID; } // 构建列表数据 $Document = M('Document'); if($cate_id){ $map['category_id'] = $cate_id; } $map['pid'] = I('pid',0); if($map['pid']){ // 子文档列表忽略分类 unset($map['category_id']); } $Document->alias('DOCUMENT'); if(!is_null($model_id)){ $map['model_id'] = $model_id; if(is_array($field) && array_diff($Document->getDbFields(),$field)){ $modelName = M('Model')->getFieldById($model_id,'name'); $Document->join('__DOCUMENT_'.strtoupper($modelName).'__ '.$modelName.' ON DOCUMENT.id='.$modelName.'.id'); $key = array_search('id',$field); if(false !== $key){ unset($field[$key]); $field[] = 'DOCUMENT.id'; } } } if(!is_null($position)){ $map[] = "position & {$position} = {$position}"; } if(!is_null($group_id)){ $map['group_id'] = $group_id; } $list = $this->lists($Document,$map,'level DESC,DOCUMENT.id DESC',$field); if($map['pid']){ // 获取上级文档 $article = $Document->field('id,title,type')->find($map['pid']); $this->assign('article',$article); } //检查该分类是否允许发布内容 $allow_publish = get_category($cate_id, 'allow_publish'); $this->assign('status', $status); $this->assign('allow', $allow_publish); $this->assign('pid', $map['pid']); $this->meta_title = '文档列表'; return $list; }</code>
其中
<code>$Document->join('__DOCUMENT_'.strtoupper($modelName).'__ '.$modelName.' ON DOCUMENT.id='.$modelName.'.id');</code>
这段联结看不懂啊,有人能帮我解释一下吗,我知道'__DOCUMENT_'.strtoupper($modelName)
代表另一个模型。'__ '.$modelName.'
这个就不知道有什么用了。
onethink的Admin/Article/getDocumentList()方法;
我直接把代码粘上来了
<code>protected function getDocumentList($cate_id=0,$model_id=null,$position=null,$field=true,$group_id=null){ /* 查询条件初始化 */ $map = array(); if(isset($_GET['title'])){ $map['title'] = array('like', '%'.(string)I('title').'%'); } if(isset($_GET['status'])){ $map['status'] = I('status'); $status = $map['status']; }else{ $status = null; $map['status'] = array('in', '0,1,2'); } if ( isset($_GET['start']) ) { $map['update_time'][] = array('egt',strtotime(I('start'))); } if ( isset($_GET['end']) ) { $map['update_time'][] = array('elt',24*60*60 + strtotime(I('end'))); } if ( isset($_GET['nickname']) ) { $map['uid'] = M('Member')->where(array('nickname'=>I('nickname')))->getField('uid'); } if(!is_administrator(UID)){ $map["uid"] = UID; } // 构建列表数据 $Document = M('Document'); if($cate_id){ $map['category_id'] = $cate_id; } $map['pid'] = I('pid',0); if($map['pid']){ // 子文档列表忽略分类 unset($map['category_id']); } $Document->alias('DOCUMENT'); if(!is_null($model_id)){ $map['model_id'] = $model_id; if(is_array($field) && array_diff($Document->getDbFields(),$field)){ $modelName = M('Model')->getFieldById($model_id,'name'); $Document->join('__DOCUMENT_'.strtoupper($modelName).'__ '.$modelName.' ON DOCUMENT.id='.$modelName.'.id'); $key = array_search('id',$field); if(false !== $key){ unset($field[$key]); $field[] = 'DOCUMENT.id'; } } } if(!is_null($position)){ $map[] = "position & {$position} = {$position}"; } if(!is_null($group_id)){ $map['group_id'] = $group_id; } $list = $this->lists($Document,$map,'level DESC,DOCUMENT.id DESC',$field); if($map['pid']){ // 获取上级文档 $article = $Document->field('id,title,type')->find($map['pid']); $this->assign('article',$article); } //检查该分类是否允许发布内容 $allow_publish = get_category($cate_id, 'allow_publish'); $this->assign('status', $status); $this->assign('allow', $allow_publish); $this->assign('pid', $map['pid']); $this->meta_title = '文档列表'; return $list; }</code>
其中
<code>$Document->join('__DOCUMENT_'.strtoupper($modelName).'__ '.$modelName.' ON DOCUMENT.id='.$modelName.'.id');</code>
这段联结看不懂啊,有人能帮我解释一下吗,我知道'__DOCUMENT_'.strtoupper($modelName)
代表另一个模型。'__ '.$modelName.'
这个就不知道有什么用了。
起别名 相当于AS