zoukankan      html  css  js  c++  java
  • 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 appcommonmodelUserEnhance();
    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函数的具体用法,请移步:(还没写)

    多学、 多记、 多练、
  • 相关阅读:
    vue报错 error: data.push is not a function
    vue elment.style样式修改(第三方组件自生成元素)
    按元素标签查询多个
    按css查询多个元素
    按CSS查询一个元素
    查询单个元素
    JavaScript 查找元素
    Spring 商品分类
    Spring 使用日志
    Spring 使用日期类型
  • 原文地址:https://www.cnblogs.com/cyfblogs/p/9719585.html
Copyright © 2011-2022 走看看