学习thinkPHP 笔记(1)————————数据库操作 自写函数getbaseWhere() 和 where等操作

 

以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   左连接








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值