以WorkerModel 里面的函数getAllNormlaWorker()作为例子讲解
/**
* 查找所有正常状态的工号* @return array 工号列表
*/
public function getAllNormalWorker($base=false){
$this->where($this->getBaseWhere(array('w.status'=>0)))->order('w.sort,w.id6d');
if(!$base){
$this->join(' __ROLE__ as r on w.role_id = r.role_id ','LEFT');
$this->field('w.id6d,w.company_id,w.department_id,w.role_id,w.worker_id,w.name,
w.gender,w.birthday,w.photo,w.motto,w.is_show,w.max_link,w.reception_level,
w.sort,w.state,w.last_time,w.nickname,r.role_name,r.is_admin,w.phone,
w.cell_phone,w.email,w.msn,w.qq,w.status,w.entry_time,w.resign_time,
w.create_time,w.update_time');
}else{
$this->field('passwd,create_time,update_time,entry_time,resign_time,del_flag,sort,state',true);
}
return $this->select();
}
首先以上代码,看函数体内代码第一行 $this->where($this->getBaseWhere(array('w.status'=>0)))->order('w.sort,w.id6d');
第一行用到了自有函数 getBaseWhere( ) 现在来说明一下这个自有函数,代码如下:
/**
* 获取基本的WHERE内容
* @param array $add 附加的where数组语句
* @return array 返回合并在一起的查询条件
*/
private function getBaseWhere($add=array()){
$this->table('__WORKER__ as w');
$where = array();
$where['w.company_id']=$this->getCompanyId();
$where['w.del_flag']=0;
return array_merge($where,$add);
}
以上为自有函数getBaseWhere(),在默认$add=array() 的情况下即参数是空数组的情况下,
先解释第一句 $this->table('__WORKER__ as w'); 首先$this是代表model 即本model: WorkerModel 所以是$model->table() 意思是 把 talk_worker表 暂时表 命名为w
第二句 $where = array(); 变量where被赋值为空数组array(),属于编程技巧 常用方法
第三句 $where['w.company_id']=$this->getCompanyId(); 就是利用 getCompanyId()方法赋值给 $where['w.company_id'],这个getCompanyId() 方法暂时还不是很明白 之后再详细看 但是用var_dump()后发现这个companyId 是 70722519.
第四句 $where['w.del_flag']=0; 很明显 就事del_flag 的值赋为0
第五句 return array_merge($where,$add); 合并传入的数组参数和在方法内变换的数组$where
----------------------------------------------------------------------------------------------------------------------------------------------------------
所以回到 getAllNormalWorker()方法
第一句 $this->where($this->getBaseWhere(array('w.status'=>0)))->order('w.sort,w.id6d');中
因为在调用getBaseWhere()方法时,传入数组参数array('w.status'=>0),所以where($this->getBaseWhere(......))
的条件其实是 where($where( talk_worker.company_id=70722519 AND talk_worker.del_flag=0 AND talk_worker.status=0))
(注:因为大学数据库没有学好 之前看的时候太坑 花了半天才发现以上的where 条件语句)
接下里 这一大段 :
$this->join(' __ROLE__ as r on w.role_id = r.role_id ','LEFT');
$this->field('w.id6d,w.company_id,w.department_id,w.role_id,w.worker_id,w.name,
w.gender,w.birthday,w.photo,w.motto,w.is_show,w.max_link,w.reception_level,
w.sort,w.state,w.last_time,w.nickname,r.role_name,r.is_admin,w.phone,
w.cell_phone,w.email,w.msn,w.qq,w.status,w.entry_time,w.resign_time,
w.create_time,w.update_time');
数据表的左连接 结合上面第一句的命令后 转化成sql 语句是这样的:
SELECT
*
FROM
talk_worker
LEFT JOIN talk_role ON talk_role.role_id = talk_worker.role_id
WHERE
talk_worker.company_id = 70722519
AND talk_worker.`status` = 0
AND talk_worker.del_flag = 0;
注意上面的 LEFT JOIN 左连接