ThinkPHP 数据库操作(三) : 查询方法、查询语法、链式操作

查询方法

条件查询方法

where 方法

可以使用 where 方法进行 AND 条件查询:

Db::table('think_user')
    ->where('name','like','%thinkphp')
    ->where('status',1)
    ->find();

多字段相同条件的 AND 查询可以简化为如下方式:

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

whereOr 方法

使用 whereOr 方法进行 OR 查询:

Db::table('think_user')
    ->where('name','like','%thinkphp')
    ->whereOr('title','like','%thinkphp')
    ->find();

多字段相同条件的 OR 查询可以简化为如下方式:

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

混合查询

where方法和whereOr方法在复杂的查询条件中经常需要配合一起混合使用,下面举个例子:

$result = Db::table('think_user')->where(function ($query) {
    $query->where('id', 1)->whereor('id', 2);
})->whereOr(function ($query) {
    $query->where('name', 'like', 'think')->whereOr('name', 'like', 'thinkphp');
})->select();

生成的sql语句类似于下面:

SELECT * FROM `think_user` WHERE ( `id` = 1 OR `id` = 2 ) OR ( `name` LIKE 'think' OR `name` LIKE 'thinkphp' )

  注意闭包查询里面的顺序,而且第一个查询方法用where或者whereOr是没有区别的。

getTableInfo 方法

使用getTableInfo可以获取表信息,信息类型 包括 fields,type,bind,pk,以数组的形式展示,可以指定某个信 息进行获取

复制代码

// 获取`think_user`表所有信息
Db::getTableInfo('think_user');
// 获取`think_user`表所有字段
Db::getTableInfo('think_user', 'fields');
// 获取`think_user`表所有字段的类型
Db::getTableInfo('think_user', 'type');
// 获取`think_user`表的主键
Db::getTableInfo('think_user', 'pk');

复制代码

查询语法

查询表达式

查询表达式支持大部分的SQL查询语法,也是 ThinkPHP 查询语言的精髓,查询表达式的使用格式:

where('字段名','表达式','查询条件');
whereOr('字段名','表达式','查询条件');

表达式不分大小写,支持的查询表达式有下面几种,分别表示的含义是:

表达式查询的用法示例如下:

EQ :等于(=)

例如:

where('id','eq',100);
where('id','=',100);

和下面的查询等效

where('id',100);

  表示的查询条件就是id=100

NEQ:不等于()

例如:

where('id','neq',100);
where('id','<>',100);

  表示的查询条件就是id>100

GET:大于等于(>=)

例如:

where('id','egt',100);
where('id','>=',100);

  表示的查询条件就是id>=100

LT:小于(<)

例如:

where('id','lt',100);
where('id','<',100);

  表示的查询条件就是id<100

ELT:小于等于(<=)

例如:

where('id','elt',100);
where('id','<=',100);

  表示的查询条件就是 id <= 100

[NOT] LIKE: 同sql的LIKE

例如:

where('name','like','thinkphp%')

  查询条件就变成 name like 'thinkphp%'

V5.0.5+ 版本开始,like查询支持使用数组

where('name','like',['%think','php%'],'OR');

[NOT] BETWEEN: 同sql的[not] between

例如:

where('id','between','1,8');
where('id','between',[1,8]);
## 两条语句等效

  查询条件就变成 'id BETWEEN 1 AND 8'

[NOT] IN:同sql的[not] in

例如:

where('id','not in','1,5,8');
where('id','not in',[1,5,8]);
## 两条语句等效

  查询条件就变成 'id NOT IN (1,5,8)','[NOT] IN' 查询支持使用闭包方式

[NOT] NULL:查询字段是否(不)是`Null`

例如:

where('name', null);
where('title','null');
where('name','not null');

如果你需要查询一个字段的值为字符串`null`或者`not null`,应该使用:

where('title','=', 'null');
where('name','=', 'not null');

EXP:表达式

支持更复杂的查询情况 例如:

where('id','in','1,3,8');

可以改成:

where('id','exp',' IN (1,3,8) ');

  `exp`查询的条件不会被当成字符串,所以后面的查询条件可以使用任何SQL支持的语法,包括使用函数和字段名称。

链式操作

数据库提供的链式操作方法,可以有效的提高数据存取的代码清晰度和开发效率,并且支持所有的CURD操作。

使用也比较简单,假如我们现在要查询一个User表的满足状态为1的前10条记录,并希望按照用户的创建时间 排序 ,代码如下:

Db::table('think_user')
    ->where('status',1)
    ->order('create_time')
    ->limit(10)
    ->select();

这里的 where 、 order 和 limit 方法就被称之为链式操作方法,除了select方法必须放到最后一个外(因为select方法并不是链式操作方法),链式操作的方法调用顺序没有先后,例如,下面的代码和上面的等效:

Db::table('think_user')
    ->order('create_time')
    ->li
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值