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()一定是最前面

转载于:https://www.cnblogs.com/cyfblogs/p/9719585.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值