switch拼接where条件

我想唯一美中不足的是用了循环,但是从阅读代码的角度看比if好太多了。也不知道有没有更好的写法。

public function spliceWhere($search_data){
        $where = ' 1 = 1';
        $bind = [];
        foreach($search_data as $key => $value){
            switch($key){
                case 't.uid':
                case 't.info_id':
                case 't.seller_id':
                    if($value !== ''){
                        $bind[str_replace('.','',$key)] = $value;
                        $where = $where.' AND '.$key.'= :'.str_replace('.','',$key).'';
                    }
                    break;
                case 'u.name':
                case 't.tel':
                case 'i.title':
                case 's.name':
                    if($value != ''){
                        $bind[str_replace('.','',$key)] = '%'.$value.'%';
                        $where = $where.' AND '.$key.' like :'.str_replace('.','',$key);
                    }
                    break;
                case 't.type':
                    if($value !== '' && ($value == 0 || $value == 1)){
                        $bind[str_replace('.','',$key)] = $value;
                        $where = $where.' AND '.$key.'= :'.str_replace('.','',$key).'';
                    }
                    break;
                case 'start_date':
                    if($value != ''){
                        $where = $where.' AND created_time >= '.strtotime($value);
                    }
                    break;
                case 'end_date':
                    if($value != ''){
                        $where = $where.' AND created_time <= '.strtotime($value);
                    }
                    break;
            }
        }
        return ['where' =>$where,'bind' => $bind];
    }

还有一种写法是使用1=1

    public function spliceWhere($search_data){
        $where = ' 1 = 1 ';
        $bind = [];
        $name = 'and 1=1 ';
        $unit_id = ' and 1=1 ';

        if(!empty($search['name'])){
            $name = "and name like ? ";
            $bind[] = '%'.$search['name'].'%';
        }
        $where .= $name;
        if(!empty($search['unit_id'])){
            $unit_id = "and unit_id = ? ";
            $bind[] = $search['unit_id'];
        }
        $where .= $unit_id;
        return [
            'where' => $where,
            'bind' => $bind
        ];
    }
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!