TP5闭包查询结合FIND_IN_SET用法

function search($post)
    {
        $ids = '5,7,11';
        $model = self::order('id desc');
        if(!empty($post['status'])){
            $model = $model->where('status','=',$post['status']);
        }
        if(!empty($post['mid'])){
            $model = $model->where('find_in_set(:id,mids)',['id'=>$post['mid']]);
        }
        if(!empty($ids)){
            $model = $model->where(function ($query)use($ids) {
                if($ids){
                    $id_arr = explode(',',$ids);
                    foreach($id_arr as &$id){
                        $query->whereOr("FIND_IN_SET($id,ids)");
                    }
                }
            });
        }
        if(!empty($post['keyword'])){
            $model = $model->where('name','LIKE','%'.$post['keyword'].'%');
        }
        return isset($post['type']) ? $model->select() : $model->paginate();
    }

mysql的原生写法:

SELECT * FROM `users` WHERE ((FIND_IN_SET(5,ids)) OR (FIND_IN_SET(7,ids)) OR (FIND_IN_SET(11,ids))) ORDER BY `id` DESC

 

 

 

你可能感兴趣的:(ThinkPHP5相关)