onethink中的一个数据库联结问题
程序员文章站
2022-05-20 12:20:07
...
onethink的Admin/Article/getDocumentList()方法;
我直接把代码粘上来了
我直接把代码粘上来了
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;
}
其中
$Document->join('__DOCUMENT_'.strtoupper($modelName).'__ '.$modelName.' ON DOCUMENT.id='.$modelName.'.id');
这段联结看不懂啊,有人能帮我解释一下吗,我知道'__DOCUMENT_'.strtoupper($modelName)
代表另一个模型。'__ '.$modelName.'
这个就不知道有什么用了。
回复内容:
onethink的Admin/Article/getDocumentList()方法;
我直接把代码粘上来了
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;
}
其中
$Document->join('__DOCUMENT_'.strtoupper($modelName).'__ '.$modelName.' ON DOCUMENT.id='.$modelName.'.id');
这段联结看不懂啊,有人能帮我解释一下吗,我知道'__DOCUMENT_'.strtoupper($modelName)
代表另一个模型。'__ '.$modelName.'
这个就不知道有什么用了。
起别名 相当于AS
上一篇: 「 」变成了 ""
下一篇: 如何通过SSH通道来访问MySQL
推荐阅读
-
基于C# 中可以new一个接口?的问题分析
-
基于C# 中可以new一个接口?的问题分析
-
在数据库‘master’中拒绝CREATE DATABASE权限问题的解决方法
-
Mysql中返回一个数据库的所有表名,列名数据类型备注
-
Oracle数据库中六种TNS:协议适配器错误问题的解决方法
-
在数据库‘master’中拒绝CREATE DATABASE权限问题的解决方法
-
Mysql中返回一个数据库的所有表名,列名数据类型备注
-
在oracle 数据库中查看一个sql语句的执行时间和SP2-0027错误
-
Asp.net中处理一个站点不同Web应用共享Session的问题
-
浅析Oracle中sys、system和Scott用户下的数据库连接问题