ThinkPHP5 高级查询之构建分组条件


ThinkPHP5 高级查询之构建分组条件

一、在tp5中通过where方法如何构建分组条件,

例如:
where user_id=$this->user_id and (status in (4,5,7) or refund_status = 2)
该如何构建?

1、通过闭包查询:

//1、通过闭包查询
$sql = Db::name('order') ->where('user_id',$this->user_id) ->where(function ($query){ $query->where('status','in',[4,5,7]) ->whereOr('refund_status',2); }) ->select(false);

把生成的sql语句打印出来:

1 string(99) "SELECT * FROM `cjd_order` WHERE `user_id` = 8 AND ( `status` IN (4,5,7) OR `refund_status` = 2 )"

2、where里直接写原生:

1 //2、直接where写原生
2 $sql = Db::name('order') 3     ->where('user_id = '.$this->user_id.'and (status in (4,5,7) or refund_status = 2)') 4     ->select(false);

 把生成的sql语句打印出来:

1 string(99) "SELECT * FROM `cjd_order` WHERE `user_id` = 8 AND ( `status` IN (4,5,7) OR `refund_status` = 2 )"

通过对比,我们发现,两种方法生成的sql语句是一样的,不过第二种方式比较简单粗暴,必要时候还是挺好用的,^><^

也可查看tp5手册高级查询部分:tp5高级查询

 二、如何查询模型中的字段作为查询条件

在使用tp5模型中,无论是一对一还是一对多,如果遇到将主表的字段作为查询条件的时候是很普通的,比如直接这样写就OK了

 1     /**  2  * 功能:商品券分配情况列表  3  *  4  * User: cyf  5  * Time: 2018/12/15 0015 17:15  6      */
 7     public function get_list($whereOr,$where,$query)  8  {  9         return $this->with('shop') 10             ->whereOr($whereOr) 11             ->where($where) 12             ->order('update_time desc') 13             ->paginate(10,false,$query); 14     }

但是如果再加上利用模型的中的字段作为查询条件的话,就复杂了,这时候tp5 的haswhere就派上用场了

1     public function get_list($whereOr,$where,$query) 2  { 3         return $this
4             ->hasWhere('shop',$whereOr) 5             ->where($where) 6             ->order('update_time desc') 7             ->paginate(10,false,$query); 8     }

注意:1、此时,with()写不写都行,如果写的话,要写在haswhere()之后,haswhere()一定是最前面

三、find_in_set()的用法

在维护推荐关系过程中,除了要存父级pid之外,一般还会记录一个path字段

还是直接看代码:

 

1 $user_enhance_model = new \app\common\model\UserEnhance(); 2 $list = $user_enhance_model
3     ->where("find_in_set($cate_id,category_ids)") 4     ->field('id,user_id,min_price,max_price,consult_num,title') 5     ->order('user_id asc') 6     ->select();

 

关于find_in_set函数的具体用法,请移步:(还没写)

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM