thinkphp查寻,3.X 5.0方式

摘要: 一、详细介绍ThinkPHP内嵌了十分灵便的查寻方式,能够迅速的开展数据信息查寻实际操作,查寻标准能够用以载入、升级和删掉等实际操作,关键涉及到到where方式等连贯性实际操作就可...

一、详细介绍

ThinkPHP内嵌了十分灵便的查寻方式,能够迅速的开展数据信息查寻实际操作,查寻标准能够用以载入、升级和删掉等实际操作,关键涉及到到where方式等连贯性实际操作就可以,不管是选用甚么数据信息库,你基本上选用一样的查寻方式(某些数据信息库比如Mongo在表述式查寻层面会出现所差别),系统软件帮你处理了不一样数据信息库的差别性,因而大家把架构的这一查寻方法称作查寻語言。查寻語言也是ThinkPHP架构的ORM闪光点,让查寻实际操作更为简易易懂。下边来逐一解读查寻語言的内函。

二、查寻方法

ThinkPHP能够适用立即应用标识符串做为查寻标准,可是大多数数状况强烈推荐应用数据库索引数字能量数组或是目标来做为查寻标准,由于会更为安全性。

1.应用标识符串做为查寻标准

它是最传统式的方法,可是安全性性不太高,比如:

 ?php 
$User = M( User // 案例化User目标 
$User- where( type=1 AND status=1 )- select(); 
? 

最终转化成的SQL句子是

SELECT * FROM think_user WHERE type=1 AND status=1

选用标识符串查寻的情况下,大家能够相互配合应用新版本出示的标识符串标准的安全性预解决体制,姑且已不细说。

2.应用数字能量数组做为查寻标准

这类方法是最经常用的查寻方法,比如:

 ?php 
$User = M( User // 案例化User目标 
$condition[ name ] = thinkphp 
$condition[ status ] = 1; 
// 把查寻标准传到查寻方式 
$User- where($condition)- select(); 
? 

最终转化成的SQL句子是

SELECT * FROM think_user WHERE `name`= thinkphp AND status=1

假如开展多字段名查寻,那麼字段名中间的默认设置逻辑性关联是 逻辑性与 AND,可是用下边的标准能够变更默认设置的逻辑性分辨,根据应用 _logic 界定查寻逻辑性:

 ?php 
$User = M( User // 案例化User目标 
$condition[ name ] = thinkphp 
$condition[ account ] = thinkphp 
$condition[ _logic ] = OR 
// 把查寻标准传到查寻方式 
$User- where($condition)- select(); 
? 

最终转化成的SQL句子是

SELECT * FROM think_user WHERE `name`= thinkphp OR `account`= thinkphp

3.应用目标方法来查寻

这儿以stdClass内嵌目标为例子:

 ?php 
$User = M( User // 案例化User目标 
// 界定查寻标准 
$condition = new stdClass(); 
$condition- name = thinkphp 
$condition- status= 1; 
$User- where($condition)- select(); 
? 

最终转化成的SQL句子和上边一样

SELECT * FROM think_user WHERE `name`= thinkphp AND status=1

应用目标方法查寻和应用数字能量数组查寻的实际效果是同样的,而且是能够交换的,大多数数状况下,大家提议选用数字能量数组方法更为高效率。

三、表述式查寻

上边的查寻标准只是是一个简易的相同分辨,可使用查寻表述式适用大量的SQL查寻英语的语法,也是ThinkPHP查寻語言的精粹,

查寻表述式的应用文件格式:$map[ 字段名名 ] = array( 表述式 , 查寻标准

表述式分不清尺寸写,适用的查寻表述式有下边几类,各自表明的含意是:

EQ 相当于(=) NEQ 不一于( ) GT 超过( ) EGT 超过相当于( =) LT 低于( ) ELT 低于相当于( =) LIKE 模糊不清查寻 [NOT] BETWEEN (没有)区段查寻 [NOT] IN (没有)IN 查寻 EXP 表述式查寻,适用SQL英语的语法

实例以下:

1.EQ :相当于(=)

比如:$map[ id ] = array( eq ,100);和下边的查寻等效电路 $map[ id ] = 100;表明的查寻标准便是 id = 100

2.NEQ: 不一于( )

比如:$map[ id ] = array( neq ,100);表明的查寻标准便是 id 100

3.GT:超过( )

比如:$map[ id ] = array( gt ,100);表明的查寻标准便是 id 100

4.EGT:超过相当于( =)

比如:$map[ id ] = array( egt ,100);表明的查寻标准便是 id = 100

5.LT:低于( )

比如:$map[ id ] = array( lt ,100);表明的查寻标准便是 id 100

6.ELT: 低于相当于( =)

比如:$map[ id ] = array( elt ,100);表明的查寻标准便是 id = 100

7.[NOT] LIKE: 同sql的LIKE

比如:$map[ name ] = array( like , thinkphp% 查寻标准就变为 name like thinkphp%

假如配备了DB_LIKE_FIELDS主要参数得话,一些字段名也会全自动开展模糊不清查寻。比如设定了: DB_LIKE_FIELDS = title|content 得话,应用 $map[ title ] = thinkphp 查寻标准便会变为 name like %thinkphp%

适用数字能量数组方法:

比如 $map[ a ] =array( like ,array( %thinkphp% , %tp ), OR $map[ b ]=array( notlike ,array( %thinkphp% , %tp ), AND

转化成的查寻标准便是:

(a like %thinkphp% OR a like %tp ) AND (b not like %thinkphp% AND b not like %tp )

8.[NOT] BETWEEN :同sql的[not] between, 查寻标准适用标识符串或是数字能量数组,

比如: $map[ id ] = array( between , 1,8 和下边的等效电路: $map[ id ] = array( between ,array( 1 , 8

查寻标准就变为 id BETWEEN 1 AND 8

9.[NOT] IN: 同sql的[not] in ,查寻标准适用标识符串或是数字能量数组,

比如: $map[ id ] = array( not in , 1,5,8 和下边的等效电路: $map[ id ] = array( not in ,array( 1 , 5 , 8

查寻标准就变为 id NOT IN (1,5, 8)

10.EXP:表述式,适用更繁杂的查寻状况

比如:$map[ id ] = array( in , 1,3,8 能够改为: $map[ id ] = array( exp , IN (1,3,8)

exp查寻的标准不容易被当做标识符串,因此后边的查寻标准可使用一切SQL适用的英语的语法,包含应用涵数和字段名名字。查寻表述式不但能用于查寻标准,还可以用以数据信息升级,比如:

 ?php 
$User = M( User // 案例化User目标 
// 要改动的数据信息目标特性取值 
$data[ name ] = ThinkPHP 
$data[ score ] = array( exp , score+1 // 客户的積分加1 
$User- where( id=5 )- save($data); // 依据标准储存改动的数据信息 
? 

四、便捷查寻

从3.0版本号刚开始,提升了便捷查寻方法,能够进一步简单化查寻标准的书写,比如:

1.完成不一样字段名同样的查寻标准

 ?php 
$User = M( User // 案例化User目标 
$map[ name|title ] = thinkphp 
// 把查寻标准传到查寻方式 
$User- where($map)- select(); 
? 

查寻标准就变为

name= thinkphp OR title = thinkphp

2.完成不一样字段名不一样的查寻标准

 ?php 
$User = M( User // 案例化User目标 
$map[ status title ] =array( 1 , thinkphp , _multi = true); 
// 把查寻标准传到查寻方式 
$User- where($map)- select(); 
? 

_multi = true务必加在数字能量数组的最终,表明当今是好几条件配对,那样查寻标准就变为 status= 1 AND title = thinkphp ,

查寻字段名适用大量的,比如:

$map[ status score title ] =array( 1 ,array( gt , 0 ), thinkphp , _multi = true);

查寻标准就变为

status= 1 AND score 0 AND title = thinkphp

留意:便捷查寻方法中 | 和 不可以同时应用。

五、区段查寻

ThinkPHP适用对某一字段名的区段查寻,

比如: $map[ id ] = array(array( gt ,1),array( lt ,10)) ;

获得的查寻标准是: (`id` 1) AND (`id` 10)

比如:$map[ id ] = array(array( gt ,3),array( lt ,10), or

获得的查寻标准是: (`id` 3) OR (`id` 10)

比如:$map[ id ] = array(array( neq ,6),array( gt ,3), and

获得的查寻标准是:(`id` != 6) AND (`id` 3)

最终一个能够是AND、 OR或是 XOR计算符,假如不写,默认设置是AND计算。

区段查寻的标准能够适用一般查寻的全部表述式,换句话说相近LIKE、GT和EXP那样的表述式都可以以适用。此外区段查寻还能够适用大量的标准,要是是对于一个字段名的标准都可以以提到一起,比如:

$map[ name ] = array(array( like , %a% ), array( like , %b% ), array( like , %c% ), ThinkPHP , or

最终的查寻标准是:

(`name` LIKE %a% ) OR (`name` LIKE %b% ) OR (`name` LIKE %c% ) OR (`name` = ThinkPHP )

六、组成查寻

组成查寻的行为主体還是选用数字能量数组方法查寻,仅仅添加了一些独特的查寻适用,包含标识符串方式查寻(_string)、复合型查寻(_complex)、恳求标识符串查寻(_query),混和查寻中的独特查寻每一次查寻只有界定一个,因为选用数字能量数组的数据库索引方法,数据库索引同样的独特查寻会被遮盖。

1.标识符串方式查寻(选用_string 做为查寻标准)

数字能量数组标准还能够和标识符串标准混和应用,比如:

 ?php 
$User = M( User // 案例化User目标 
$map[ id ] = array( neq ,1); $map[ name ] = ok $map[ _string ] = status=1 AND score 10 $User- where($map)- select(); 
? 

最终获得的查寻标准就变成:

( `id` != 1 ) AND ( `name` = ok ) AND ( status=1 AND score 10 )

2.恳求标识符串查寻方法

恳求标识符串查寻是一类型似于URL传参的方法,能够适用简易的标准相同分辨。

 ?php 
$map[ id ] = array( gt , 100 
$map[ _query ] = status=1 score=100 _logic=or 
? 

获得的查寻标准是:

`id` 100 AND (`status` = 1 OR `score` = 100 )

七、复合型查寻

复合型查寻非常于封裝了一个新的查寻标准,随后划入原先的查寻标准当中,因此能够进行较为繁杂的查寻标准拼装。

比如:

 ?php 
$where[ name ] = array( like , %thinkphp% 
$where[ title ] = array( like , %thinkphp% 
$where[ _logic ] = or 
$map[ _complex ] = $where; 
$map[ id ] = array( gt ,1); 
? 

查寻标准是

( id 1) AND ( ( name like %thinkphp% ) OR ( title like %thinkphp% ) )

许多查寻方法能够互相变换,比如上边的查寻标准能够改为:

$where[ id ] = array( gt ,1); $where[ _string ] = (name like %thinkphp% ) OR ( title like %thinkphp )

最终转化成的SQL句子是一致的。

八、统计分析查寻

在运用中大家常常用到到一些统计分析数据信息,比如当今全部(或是考虑一些标准)的客户数、全部客户的较大積分、客户的均值考试成绩这些,ThinkPHP为这种统计分析实际操作出示了一系列产品的内嵌方式,包含:

Count 统计分析总数,主要参数是要统计分析的字段名名(可选择) Max 获得较大值,主要参数是要统计分析的字段名名(务必) Min 获得最少值,主要参数是要统计分析的字段名名(务必) Avg 获得均值值,主要参数是要统计分析的字段名名(务必) Sum 获得总分,主要参数是要统计分析的字段名名(务必)

使用方法实例:

$User = M( User // 案例化User目标

获得客户数: $userCount = $User- count();

或是依据字段名统计分析: $userCount = $User- count( id

获得客户的较大積分: $maxScore = $User- max( score

获得積分超过0的客户的最少積分: $minScore = $User- where( score 0 )- min( score

获得客户的均值積分: $avgScore = $User- avg( score

统计分析客户的总分: $sumScore = $User- sum( score

而且全部的统计分析查寻均适用连贯性实际操作的应用。

九、SQL查寻

ThinkPHP内嵌的ORM和ActiveRecord方式完成了便捷的数据信息存储实际操作,并且新版本提升的连贯性实际操作作用也是让这一数据信息实际操作更为清楚,可是ThinkPHP依然保存了原生态的SQL查寻和实行实际操作适用,以便考虑繁杂查寻的必须和一些独特的数据信息实际操作,SQL查寻的回到值由于是立即回到的Db类的查寻結果,沒有做一切的解决。关键包含下边2个方式:

1.query方式 :实行SQL查寻实际操作

使用方法 query($sql,$parse=false)

主要参数 sql(务必):要查寻的SQL句子

parse(可选择):是不是必须分析SQL

回到值 假如数据信息不法或是查寻不正确则回到false

不然回到查寻結果数据信息集(同select方式)

应用实例:

 ?php 
$Model = new Model() // 案例化一个model目标 沒有相匹配一切数据信息表 
$Model- query( select * from think_user where status=1 
? 

假如你当今选用了遍布式数据信息库,而且设定了读写能力分离出来得话,query方式自始至终是在学网络服务器实行,因而query方式相匹配的全是读实际操作,而无论你的SQL句子是啥。

2.execute方式 :execute用以升级和载入数据信息的sql实际操作

使用方法 execute($sql,$parse=false)

主要参数 sql(务必):要实行的SQL句子

parse(可选择):是不是必须分析SQL

回到值 假如数据信息不法或是查寻不正确则回到false 不然回到危害的纪录数

应用实例:

 ?php 
$Model = new Model() // 案例化一个model目标 沒有相匹配一切数据信息表 
$Model- execute( update think_user set name= thinkPHP where status=1 
? 

假如你当今选用了遍布式数据信息库,而且设定了读写能力分离出来得话,execute方式自始至终是在写网络服务器实行,因而execute方式相匹配的全是写实际操作,而无论你的SQL句子是啥。

十、动态性查寻

依靠PHP5語言的特点,ThinkPHP完成了动态性查寻,关键实体模型的动态性查寻方式包含下边几类:

getBy 依据字段名的值查寻数据信息 比如,getByName,getByEmail getFieldBy 依据字段名查寻并回到某一字段名的值 比如,getFieldByName

1.getBy动态性查寻:该查寻方法对于数据信息表的字段名开展查寻纪录。

比如,User目标有着id,name,email,address 等特性,那麼大家便可令其用下边的查寻方式来立即依据某一特性来查寻合乎标准的纪录。

 ?php 
$user = $User- getByName( liu21st 
$user = $User- getByEmail( liu21st 
$user = $User- getByAddress( 我国深圳市 
? 

临时不兼容大部分据字段名的动态性查寻方式,请应用find方式和select方式开展查寻。

2.getFieldBy动态性查寻:对于某一字段名查寻并回到某一字段名的值,比如

$userId = $User- getFieldByName( liu21st , id

表明依据客户的name获得客户的id值。

十一、子查寻

从3.0版本号刚开始增加了子查寻适用,有二种应用方法:

1、应用select方式

当select方式的主要参数为false的情况下,表明不开展查寻仅仅回到搭建SQL,比如:

// 最先结构子查寻SQL $subQuery = $model- field( id,name )- table( tablename )- group( field )- where($where)- order( status )- select(false);

当select方式传到false主要参数的情况下,表明不实行当今查寻,而仅仅转化成查寻SQL。

2、应用buildSql方式

$subQuery = $model- field( id,name )- table( tablename )- group( field )- where($where)- order( status )- buildSql();

启用buildSql方式后不容易开展具体的查寻实际操作,而仅仅转化成该次查寻的SQL句子(以便防止搞混,会在SQL两侧再加括弧),随后大家立即在事后的查寻中立即启用。

//运用子查寻开展查寻 $model- table($subQuery. a )- where()- order()- select()

结构的子查寻SQL能用于ThinkPHP的连贯性实际操作方式,比如table where等。

(資源库 )

Tag标识:ThinkPHP


联系我们

全国服务热线:4000-399-000 公司邮箱:343111187@qq.com

  工作日 9:00-18:00

关注我们

官网公众号

官网公众号

Copyright?2020 广州凡科互联网科技股份有限公司 版权所有 粤ICP备10235580号 客服热线 18720358503

技术支持:网站建设文章