ホームページ バックエンド開発 PHPチュートリアル ThinkPHP CURDメソッドのwhereメソッドの詳細解説_PHPチュートリアル

ThinkPHP CURDメソッドのwhereメソッドの詳細解説_PHPチュートリアル

Jul 13, 2016 am 10:24 AM
thinkphp

ThinkPHP の CURD 操作で最も一般的に使用され、かつ最も複雑なクエリ メソッドは where メソッドです。 whereメソッドもモデルクラスのコヒーレント演算メソッドの一つで、主にクエリや演算条件の設定に使用されます。

where メソッドの使用は、ThinkPHP クエリ言語の本質であり、通常のクエリ、式クエリ、クイック クエリ、インターバル クエリ、結合クエリなどのクエリを実行できる、ThinkPHP ORM (オブジェクト リレーショナル マッピング) の重要な部分です。 where メソッドのパラメーターは文字列と配列をサポートしていますが、オブジェクトも使用できますが、お勧めしません。

1.弦の状態

文字列条件を使用してクエリを直接実行し、次に例を示します:

リーリー

最終的に生成された SQL ステートメントは

リーリー

バージョン 3.1 以降を使用する場合、文字列条件を使用する場合は、より安全性を確保するために前処理メカニズムと連携することをお勧めします。例:

リーリー

または次を使用します:

リーリー

$id 変数がユーザーの送信または URL アドレスから取得される場合、受信した型が非数値型の場合、クエリの前に強制的に数値形式にフォーマットされます。
文字列前処理形式タイプでは、数値、文字列などの指定がサポートされています。詳細については、vsprintf メソッドのパラメータの説明を参照してください。

2. 配列条件

配列条件の使用法は、ThinkPHP が推奨する使用法です。

一般的なお問い合わせ

最も単純な配列クエリ方法は次のとおりです:

リーリー

最終的に生成された SQL ステートメントは

リーリー

式クエリ

上記のクエリ条件は単純な等価性判定です。クエリ式を使用して、より多くの SQL クエリ構文をサポートできます。

リーリー

式では大文字と小文字が区別されません。サポートされているクエリ式は次のとおりです。それぞれの意味は次のとおりです。

に等しい と等しくありません
表現 意味
EQ は(=)
NEQ は (<>)
GT (>)より大きい
EGT 以上 (>=)
LT (<)未満
エルト 以下 (<=)
いいね あいまいクエリ
[ない]間 (not) 間隔クエリ
[ない]入っています (含まれていない)INクエリ
経験値 式クエリ、SQL 構文をサポート

 

示例如下:

EQ :等于(=)

例如:

$map['id'] = array('eq',100);

ログイン後にコピー

和下面的查询等效

$map['id'] = 100;

ログイン後にコピー

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

NEQ: 不等于(<>)

例如:

$map['id'] = array('neq',100);

ログイン後にコピー

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

GT:大于(>)

例如:

$map['id'] = array('gt',100);

ログイン後にコピー

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

EGT:大于等于(>=)

例如:

$map['id'] = array('egt',100);

ログイン後にコピー

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

LT:小于(<)

例如:

$map['id'] = array('lt',100);

ログイン後にコピー

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

ELT: 小于等于(<=)

例如:

$map['id'] = array('elt',100);

ログイン後にコピー

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

[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')

ログイン後にコピー

[NOT] BETWEEN :同sql的[not] between, 查询条件支持字符串或者数组,例如:

$map['id'] = array('between','1,8');

ログイン後にコピー

和下面的等效:

$map['id'] = array('between',array('1','8'));

ログイン後にコピー

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

[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)

EXP:表达式,支持更复杂的查询情况

例如:

$map['id'] = array('in','1,3,8');

ログイン後にコピー

可以改成:

$map['id'] = array('exp',' IN (1,3,8) ');

ログイン後にコピー

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

查询表达式不仅可用于查询条件,也可以用于数据更新,例如:

$User = M("User"); // 实例化User对象
 // 要修改的数据对象属性赋值
$data['name'] = 'ThinkPHP';
$data['score'] = array('exp','score+1');// 用户的积分加1
$User->where('id=5')->save($data); // 根据条件保存修改的数据

ログイン後にコピー

快捷查询

where方法支持快捷查询方式,可以进一步简化查询条件的写法,例如:

一、实现不同字段相同的查询条件

$User = M("User"); // 实例化User对象
$map['name|title'] = 'thinkphp';
 // 把查询条件传入查询方法
$User->where($map)->select(); 

ログイン後にコピー

查询条件就变成 name= 'thinkphp' OR title = 'thinkphp'

二、实现不同字段不同的查询条件

$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'

注意:快捷查询方式中“|”和“&”不能同时使用。

区间查询

where方法支持对某个字段的区间查询,例如:

$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),混合查询中的特殊查询每次查询只能定义一个,由于采用数组的索引方式,索引相同的特殊查询会被覆盖。

一、字符串模式查询(采用_string 作为查询条件)

数组条件还可以和字符串条件混合使用,例如:

$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 )

ログイン後にコピー

二、请求字符串查询方式

请求字符串查询是一种类似于URL传参的方式,可以支持简单的条件相等判断。

$map['id'] = array('gt','100');
$map['_query'] = 'status=1&score=100&_logic=or';

ログイン後にコピー

得到的查询条件是:`id`>100 AND (`status` = '1' OR `score` = '100')

三、复合查询

复合查询相当于封装了一个新的查询条件,然后并入原来的查询条件之中,所以可以完成比较复杂的查询条件组装。
例如:

$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%') )

ログイン後にコピー

复合查询使用了_complex作为子查询条件来定义,配合之前的查询方式,可以非常灵活的制定更加复杂的查询条件。
很多查询方式可以相互转换,例如上面的查询条件可以改成:

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

ログイン後にコピー

最后生成的SQL语句是一致的。

3.多次调用

自3.1.3版本开始,where方法支持多次调用,但字符串条件只能出现一次,例如:

$map['a'] = array('gt',1);
$where['b'] = 1;
$Model->where($map)->where($where)->where('status=1')->select();

ログイン後にコピー

多次的数组条件表达式会最终合并,但字符串条件则只支持一次。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/825329.htmlTechArticleThinkPHP CURD操作的查询方法中最常用但也是最复杂的就是where方法。where方法也属于模型类的连贯操作方法之一,主要用于查询和操作条件的...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

thinkphpプロジェクトの実行方法 thinkphpプロジェクトの実行方法 Apr 09, 2024 pm 05:33 PM

ThinkPHP プロジェクトを実行するには、Composer をインストールし、Composer を使用してプロジェクトを作成し、プロジェクト ディレクトリに入り、php bin/consoleserve を実行し、http://localhost:8000 にアクセスしてようこそページを表示する必要があります。

thinkphp にはいくつかのバージョンがあります thinkphp にはいくつかのバージョンがあります Apr 09, 2024 pm 06:09 PM

ThinkPHP には、さまざまな PHP バージョン向けに設計された複数のバージョンがあります。メジャー バージョンには 3.2、5.0、5.1、および 6.0 が含まれますが、マイナー バージョンはバグを修正し、新機能を提供するために使用されます。最新の安定バージョンは ThinkPHP 6.0.16 です。バージョンを選択するときは、PHP バージョン、機能要件、コミュニティ サポートを考慮してください。最高のパフォーマンスとサポートを得るには、最新の安定バージョンを使用することをお勧めします。

thinkphpの実行方法 thinkphpの実行方法 Apr 09, 2024 pm 05:39 PM

ThinkPHP フレームワークをローカルで実行する手順: ThinkPHP フレームワークをローカル ディレクトリにダウンロードして解凍します。 ThinkPHP ルート ディレクトリを指す仮想ホスト (オプション) を作成します。データベース接続パラメータを構成します。 Webサーバーを起動します。 ThinkPHP アプリケーションを初期化します。 ThinkPHP アプリケーションの URL にアクセスして実行します。

laravelとthinkphpではどちらが優れていますか? laravelとthinkphpではどちらが優れていますか? Apr 09, 2024 pm 03:18 PM

Laravel フレームワークと ThinkPHP フレームワークのパフォーマンスの比較: ThinkPHP は、最適化とキャッシュに重点を置いて、一般に Laravel よりもパフォーマンスが優れています。 Laravel は優れたパフォーマンスを発揮しますが、複雑なアプリケーションの場合は、ThinkPHP の方が適している可能性があります。

開発に関する提案: ThinkPHP フレームワークを使用して非同期タスクを実装する方法 開発に関する提案: ThinkPHP フレームワークを使用して非同期タスクを実装する方法 Nov 22, 2023 pm 12:01 PM

「開発に関する提案: ThinkPHP フレームワークを使用して非同期タスクを実装する方法」 インターネット技術の急速な発展に伴い、Web アプリケーションには、多数の同時リクエストと複雑なビジネス ロジックを処理するための要件が​​ますます高まっています。システムのパフォーマンスとユーザー エクスペリエンスを向上させるために、開発者は多くの場合、電子メールの送信、ファイルのアップロードの処理、レポートの生成など、時間のかかる操作を実行するために非同期タスクの使用を検討します。 PHP の分野では、人気のある開発フレームワークとして ThinkPHP フレームワークが、非同期タスクを実装するための便利な方法をいくつか提供しています。

thinkphpのインストール方法 thinkphpのインストール方法 Apr 09, 2024 pm 05:42 PM

ThinkPHP のインストール手順: PHP、Composer、および MySQL 環境を準備します。 Composer を使用してプロジェクトを作成します。 ThinkPHP フレームワークと依存関係をインストールします。データベース接続を構成します。アプリケーションコードを生成します。アプリケーションを起動し、http://localhost:8000 にアクセスします。

thinkphpのパフォーマンスはどうですか? thinkphpのパフォーマンスはどうですか? Apr 09, 2024 pm 05:24 PM

ThinkPHP は、キャッシュ メカニズム、コードの最適化、並列処理、データベースの最適化などの利点を備えた高性能 PHP フレームワークです。公式パフォーマンステストでは、1秒あたり10,000以上のリクエストを処理できることが示されており、実際のアプリケーションではJD.comやCtripなどの大規模なWebサイトやエンタープライズシステムで広く使用されています。

開発に関する提案: API 開発に ThinkPHP フレームワークを使用する方法 開発に関する提案: API 開発に ThinkPHP フレームワークを使用する方法 Nov 22, 2023 pm 05:18 PM

開発の提案: API 開発に ThinkPHP フレームワークを使用する方法 インターネットの継続的な発展に伴い、API (アプリケーション プログラミング インターフェイス) の重要性がますます高まっています。 API は、異なるアプリケーション間の通信の橋渡しとなるもので、データの共有や関数の呼び出しなどを実現し、開発者に比較的簡単かつ迅速な開発手法を提供します。優れた PHP 開発フレームワークである ThinkPHP フレームワークは、効率的でスケーラブルで使いやすいです。

See all articles