【TP5 :数据库:查询构造器:链式操作】高级查询

版权声明:本文为ywcmoon原创文章,未经允许不得转载。 https://blog.csdn.net/qq_39251267/article/details/82257264

高级查询

快捷查询

一种多字段相同查询条件的简化写法,在多个字段之间用|分割表示OR查询,用&分割表示AND查询

Db::table('think_user')
    ->where('name|title','like','thinkphp%')
    ->where('create_time&update_time','>',0)
    ->find();

生成的查询SQL是:

SELECT
    *
FROM
    `think_user`
WHERE( `name` LIKE 'thinkphp%' OR `title` LIKE 'thinkphp%' )
AND ( `create_time` > 0 AND `update_time` > 0 )
LIMIT 1

支持所有的查询表达式

区间查询

一种同一字段多个查询条件的简化写法

Db::table('think_user')
    ->where('name',['like','thinkphp%'],['like','%thinkphp'])
    ->where('id',['>',0],['<>',10],'or')
    ->find();

生成的SQL语句为:

SELECT
    *
FROM
    `think_user`
WHERE
    (
        `name` LIKE 'thinkphp%'
        AND `name` LIKE '%thinkphp'
    )
AND (`id` > 0 OR `id` <> 10)
LIMIT 1

查询条件必须使用数组定义方式,支持所有查询表达式

//错误的查询方式
Db::table('think_user')
    ->where('name',['like','thinkphp%'],['like','%thinkphp'])
    ->where('id',5,['<>',10],'or')
    ->find();

批量查询

可进行多个条件的批量条件查询定义

Db::table('think_user')
    ->where([
        'name'  =>  ['like','thinkphp%'],
        'title' =>  ['like','%thinkphp'],
        'id'    =>  ['>',0],
        'status'=>  1
    ])
    ->select();

生成的SQL语句为:

SELECT
    *
FROM
    `think_user`
WHERE
    `name` LIKE 'thinkphp%'
AND `title` LIKE '%thinkphp'
AND `id` > 0
AND `status` = '1'

闭包查询

Db::table('think_user')->select(function($query){
    $query->where('name','thinkphp')
        ->whereOr('id','>',10);
});

生成的SQL语句为:

SELECT * FROM `think_user` WHERE `name` = 'thinkphp' OR `id` > 10

使用Query对象查询

可事先封装Query对象,并传入select方法

$query = new \think\db\Query;
$query->name('user')
    ->where('name','like','%think%')
    ->where('id','>',10)
    ->limit(10);
Db::select($query);    

如果使用Query对象的话,select方法之前调用的任何的链式操作都是无效。

混合查询

可以结合前面提到的所有方式进行混合查询

Db::table('think_user')
    ->where('name',['like','thinkphp%'],['like','%thinkphp'])
    ->where(function($query){
        $query->where('id',['<',10],['>',100],'or');
    })
    ->select();

生成的SQL语句是:

SELECT
    *
FROM
    `think_user`
WHERE
    (
        `name` LIKE 'thinkphp%'
        AND `name` LIKE '%thinkphp'
    )
AND (`id` < 10 OR `id` > 100)

字符串条件查询

使用原生SQL语句查询

Db::table('think_user')
    ->where('id > 0 AND name LIKE "thinkphp%"')
    ->select();

可以对字符串查询条件使用参数绑定

Db::table('think_user')
    ->where('id > :id AND name LIKE :name ',['id'=>0, 'name'=>'thinkphp%'])
    ->select();

V5.0.4+开始,ThinkPHP支持对同一个字段多次调用查询条件

Db::table('think_user')
    ->where('name','like','%think%')
    ->where('name','like','%php%')
    ->where('id','in',[1,5,80,50])
    ->where('id','>',10)
    ->find();

快捷方法(V5.0.5+)

V5.0.5+版本开始新增一系列快捷方法,用于简化查询

方法 作用
whereNull 查询字段是否为Null
whereNotNull 查询字段是否不为Null
whereIn 字段IN查询
whereNotIn 字段NOT IN查询
whereBetween 字段BETWEEN查询
whereNotBetween 字段NOT BETWEEN查询
whereLike 字段LIKE查询
whereNotLike 字段NOT LIKE查询
whereExists EXISTS条件查询
whereNotExists NOT EXISTS条件查询
whereExp 表达式查询

猜你喜欢

转载自blog.csdn.net/qq_39251267/article/details/82257264