和where方法相同用法的方法还包括whereOr、whereIn等一系列快捷查询方法,下面仅以where为例解释用法。
1. 表达式查询
表达式查询是官方推举利用的查询办法。

更多的表达式查询语法,可以参考前面的查询表达式部分。
新建Index掌握器,并新建expQuery方法
预览:
2. 数组条件
可以通过数组办法批量设置查询条件,利用办法如下:
在Index掌握器中,新建arrQuery方法,利用数组条件查询。
预览:
把稳:
1. 5.1的数组查询办法有所调度,是为了只管即便避免数组办法的条件查询注入。
$where = [
['name','like','%2%'],//查询name字段值包含2
['cid','=',2]//查询cid=2
];
$data = Db::table('think_user')->where($where)->select();
3. 字符串条件
在Index掌握器中,新建strQuery方法:
预览:
把稳:
1. 把稳利用字符串查询条件和表达式查询的一个差异在于,不会对查询字段进行避免关键词冲突处理。
二、tabletable方法紧张用于指定操作的数据表。
一样平常情形下,操作模型的时候系统能够自动识别当前对应的数据表,以是,利用table方法的情形常日是为了:
①切换操作的数据表;
②对多表进行操作;
1)table的基本利用
在Index掌握器中,新建tableQuery方法:
预览:
2)切换操作的数据库
①新建数据库tp_test,并在数据库中新建表city,在表中录入一点数据
②修正Index掌握器中的tableQuery方法:
预览:
把稳:
1. 须要把稳的是table方法不会改变数据库的连接,以是你要确保当前连接的用户有权限操作相应的数据库和数据表。
2. table方法指定的数据表须要完全的表名,但可以采取name办法简化数据表前缀的传入:
例如:Db::name('user')->where('status > 1')->select();
会自动获取当前模型对应的数据表前缀来天生think_user数据表名称。
3)多表操作
①基本利用
修正Index掌握器下的tableQuery方法:
预览:
②利用数组办法定义
为了只管即便避免和mysql的关键字冲突,可以建议利用数组办法定义。
修正Index掌握器下的tableQuery方法,利用数组办法定义:
预览:
把稳:
1. 利用数组办法定义的上风是可以避免由于表名和关键字冲突而出错的情形。
三、aliasalias用于设置当前数据表的别名,便于利用其他的连贯操作例如join方法等。
1)基本利用
在Index掌握器中,新建aliasQuery方法:
预览:
2)传入数组批量设置数据表以及别名
修正Index掌握器下的aliasQuery方法:
预览:
四、field
field方法紧张浸染是标识要返回或者操作的字段,可以用于查询和写入操作。
1. 用于查询
1)指定字段
在查询操作中field方法是利用最频繁的。
①基本利用
在Index掌握器中,新建fieldQuery方法:
预览:
②给某个字段设置别名
修正Index掌握器下的fieldQuery方法:
预览:
把稳:
1. 取别名时,可以利用as或不用,例如:
① 利用as:name as 用户名
② 不用as:name 用户名
2. 利用SQL函数
可以在field方法中直策应用函数。
修正Index掌握器下的fieldQuery方法:
预览:
把稳:
1. 除了select方法之外,所有的查询方法,包括find等都可以利用field方法。
V5.1.7+版本开始,如果须要利用SQL函数,推举利用下面的办法:
修正Index掌握器下的fieldQuery方法:
预览:
3. 利用数组参数
field方法的参数可以支持数组。
1)利用数组参数的基本利用
修正Index掌握器下的fieldQuery方法:
预览:
2)数组办法的定义可以为某些字段定义别名
修正Index掌握器下的fieldQuery方法:
预览:
3)处理繁芜字段
对付一些更繁芜的字段哀求,数组的上风则更加明显。
修正Index掌握器下的fieldQuery方法:
预览:
把稳:
1. 对付带有繁芜SQL函数的字段需求必须利用数组办法。
4. 获取所有字段
如果有一个表有非常多的字段,须要获取所有的字段(这个大概很大略,由于不调用field方法或者直策应用空的field方法都能做到)。
修正Index掌握器下的fieldQuery方法:
预览:
但是这并不是获取所有字段,而是显式的调用所有字段(对付对性能哀求比较高的系统,这个哀求并不过分,最少是一个比较好的习气),下面的用法可以完成预期的浸染:
修正Index掌握器下的fieldQuery方法:
预览:
把稳:
1. field(true)的用法会显式的获取数据表的所有字段列表,哪怕你的数据表有100个字段。
5. 字段打消
如果我希望获撤消除数据表中的content字段(文本字段的值非常耗内存)之外的所有字段值,我们就可以利用field方法的打消功能。
1)打消一个字段
修正Index掌握器下的fieldQuery方法:
预览:
2)打消多个字段
修正Index掌握器下的fieldQuery方法:
预览:
把稳:
1. 把稳的是字段打消功能不支持跨表和join操作。
6. 用于写入
除了查询操作之外,field方法还有一个非常主要的安全功能--字段合法性检测。field方法结合数据库的写入方法利用就可以完成表单提交的字段合法性检测。
修正Index掌握器下的fieldQuery方法:
预览:
把稳:
1. field('name,cid')表示表单中的合法字段只有name和cid字段,无论用户通过什么手段变动或者添加了浏览器的提交字段,都会直接屏蔽。由于,其他所有字段我们都不肯望由用户提交来决定,你可以通过自动完成功能定义额外须要自动写入的字段。
2. 在开启数据表字段严格检讨的情形下,提交了造孽字段会抛出非常,可以在数据库设置文件中设置:
// 关闭严格字段检讨
'fields_strict'=>false,
【例2】关闭严格字段检讨
数据库配置文件(config/database.php)中fields_strict配置项默认为true,开启严格字段检讨,开启后提交了造孽字段会抛出非常,如果关闭严格字段检讨,提交造孽字段不会抛出非常,会将造孽字段过滤后插入合法的数据到数据库。
修正数据库配置文件(config/database.php),关闭严格字段检讨:
重新访问fieldQuery方法:
插入数据后的数据库:
ThinkPHP5连载为卓象程序员原创,转载请联系卓象程序员
关注卓象程序员,定期发布技能文章
下一篇讲解“查询布局器-链式操作的方法二”