ホームページ バックエンド開発 PHPチュートリアル ThinkPHP での where() の使用方法の詳細な説明

ThinkPHP での where() の使用方法の詳細な説明

Jun 06, 2018 pm 02:36 PM

この記事では主に ThinkPHP の where() の使い方について詳しく説明します。必要な方は参照してください。

データベース操作の結果。つまり、SQL クエリ ステートメントの where 句です。この記事では、ThinkPHP の where() の使用法を詳しく説明します。興味のある方は参考にしてください。この記事では、ThinkPHP の where() メソッドの使用法を紹介します。 where メソッドを使用すると、データベース操作の結果をフィルタリングできます。つまり、SQL クエリ ステートメントの where 句です。

今日は、最も一般的に使用される、しかし最も複雑なクエリの where メソッドについて説明します。 where メソッドは、モデル クラスの一貫した操作メソッドの 1 つでもあり、主にクエリと動作条件の設定に使用されます。

where メソッドの使用は、ThinkPHP クエリ言語の本質であり、通常のクエリ、式クエリ、クイック クエリ、間隔クエリ、結合クエリなどのクエリ操作を完了できる重要な部分です。 where メソッドのパラメーターは文字列と配列をサポートしていますが、オブジェクトも使用できますが、お勧めしません。

文字列条件文字列条件を使用してクエリや直接操作を行います。例:

$User = M("User"); // 实例化User对象
$User->where('type=1 AND status=1')->select();
ログイン後にコピー

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

SELECT * FROM think_user WHERE type=1 AND status=1
ログイン後にコピー

バージョン 3.1 以降を使用している場合文字列条件を使用する場合は、

$Model->where("id=%d and username='%s' and
xx='%f'",array($id,$username,$xx))->select();
ログイン後にコピー

のような前処理メカニズムと連携して、セキュリティを強化することをお勧めします。または URL アドレスが数値以外の型で渡された場合、クエリの前に強制的に数値形式にフォーマットされます。

文字列前処理形式タイプは、数値、文字列などの指定をサポートしています。詳細については、vsprintf メソッドのパラメーターの説明を参照してください。

配列条件


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

通常のクエリ

最も単純な配列クエリメソッドは次のとおりです:

$Model->where("id=%d and username='%s' and xx='%f'",$id,$username,$xx)->select();
ログイン後にコピー
最終的に生成されるSQLステートメントは

$User = M("User"); // 实例化User对象
$map['name'] = 'thinkphp';
$map['status'] = 1;
// 把查询条件传入查询方法
$User->where($map)->select();
ログイン後にコピー

式クエリです。

上記のクエリ条件は単純な等価性の判定にすぎません。クエリ式を使用すると、より多くの SQL クエリ構文をサポートできます。それぞれの意味は次のとおりです:

式の意味

EQは(=)に等しい

NEQは等しくない(<>)

GTはより大きい(>)

EGTは以上であるto (>= )

LT 未満 (<)

ELT 以下 (<=)

LIKE ファジークエリ

[NOT] BETWEEN (not) 間隔クエリ

[NOT] IN (not)IN クエリEXP 式クエリ、SQL 構文をサポートします例は次のとおりです:

EQ: (=) に等しい


例:


SELECT * FROM think_user WHERE `name`=&#39;thinkphp&#39; AND status=1
ログイン後にコピー



は次のクエリと同等です

$map[&#39;字段1&#39;] = array(&#39;表达式&#39;,&#39;查询条件1&#39;);
$map[&#39;字段2&#39;] = array(&#39;表达式&#39;,&#39;查询条件2&#39;);
$Model->where($map)->select(); // 也支持
ログイン後にコピー

表現されるクエリ条件は id = 100

NEQ: No Equal to (<>)

例:

$map[&#39;id&#39;] = array(&#39;eq&#39;,100);
ログイン後にコピー

はクエリ条件が id 100 であることを表します <>

GT: より大きい>)

例:

$map[&#39;id&#39;] = 100;
ログイン後にコピー

クエリ条件は id > 100 を表します

EGT: (>=) 以上

例:

$map[&#39;id&#39;] = array(&#39;neq&#39;,100);
ログイン後にコピー

クエリ条件が ID >= 100 であることを表します

LT: (<)

例:

$map[&#39;id&#39;] = array(&#39;gt&#39;,100);
ログイン後にコピー

表現されるクエリ条件は ID < 100 です

ELT: 以下です(<=)

例:

$map[&#39;id&#39;] = array(&#39;egt&#39;,100);
ログイン後にコピー

表されるクエリ条件は id <= 100

[NOT] LIKE: SQL と同じ LIKE

例:

$map[&#39;id&#39;] = array(&#39;lt&#39;,100);
ログイン後にコピー

クエリ条件は「thinkphp%」のような名前になります

DB_LIKE_FIELDS パラメータが設定されている場合、一部のフィールドもファジークエリとして自動的に処理されます。たとえば、

$map[&#39;id&#39;] = array(&#39;elt&#39;,100);
ログイン後にコピー

が設定されている場合、

$map[&#39;name&#39;] = array(&#39;like&#39;,&#39;thinkphp%&#39;);
ログイン後にコピー

を使用したクエリ条件は、「%thinkphp%」のような名前になります

&#39;DB_LIKE_FIELDS&#39;=>&#39;title|content&#39;
ログイン後にコピー

によって生成されたクエリなどの配列モードをサポートします

条件は次のとおりです:

$map[&#39;title&#39;] = &#39;thinkphp&#39;;
ログイン後にコピー

[NOT] BETWEEN: SQL の [not] between と同じで、クエリ条件は文字列または配列をサポートします。たとえば、:


$map[&#39;a&#39;] =array(&#39;like&#39;,array(&#39;%thinkphp%&#39;,&#39;%tp&#39;),&#39;OR&#39;);
$map[&#39;b&#39;] =array(&#39;notlike&#39;,array(&#39;%thinkphp%&#39;,&#39;%tp&#39;),&#39;AND&#39;);
ログイン後にコピー

は次と同等です。

(a like &#39;%thinkphp%&#39; OR a like &#39;%tp&#39;) AND (b not like &#39;%thinkphp%&#39; AND b not like &#39;%tp&#39;)
ログイン後にコピー

クエリ条件は ID BETWEEN 1 AND 8 になります

[NOT] IN: SQL の [not] in と同じで、クエリ条件は文字列または配列をサポートします。例:

$map[&#39;id&#39;] = array(&#39;between&#39;,&#39;1,8&#39;);
ログイン後にコピー

は以下と同等です:

$map[&#39;id&#39;] = array(&#39;between&#39;,array(&#39;1&#39;,&#39;8&#39;));
ログイン後にコピー

クエリ条件はID NOT IN (1,5, 8)になります

EXP: 式、より複雑なクエリ状況をサポートします

例:

$map[&#39;id&#39;] = array(&#39;in&#39;,&#39;1,3,8&#39;);
ログイン後にコピー

可以改成:

$map[&#39;id&#39;] = array(&#39;exp&#39;,&#39; IN (1,3,8) &#39;);
ログイン後にコピー

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

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

$User = M("User"); // 实例化User对象
// 要修改的数据对象属性赋值
$data[&#39;name&#39;] = &#39;ThinkPHP&#39;;
$data[&#39;score&#39;] = array(&#39;exp&#39;,&#39;score+1&#39;);// 用户的积分加1
$User->where(&#39;id=5&#39;)->save($data); // 根据条件保存修改的数据
ログイン後にコピー

快捷查询

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

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

$User = M("User"); // 实例化User对象
$map[&#39;name|title&#39;] = &#39;thinkphp&#39;;
// 把查询条件传入查询方法
$User->where($map)->select();
ログイン後にコピー

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

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

$User = M("User"); // 实例化User对象
$map[&#39;status&title&#39;] =array(&#39;1&#39;,&#39;thinkphp&#39;,&#39;_multi&#39;=>true);
// 把查询条件传入查询方法
$User->where($map)->select();
ログイン後にコピー

'_multi'=>true必须加在数组的最后,表示当前是多条件匹配,这样查询条件就变成 status= 1 AND title = 'thinkphp' ,查询字段支持更多的,例如:

$map[&#39;status&score&title&#39;] =array(&#39;1&#39;,array(&#39;gt&#39;,&#39;0&#39;),&#39;thinkphp&#39;,&#39;_multi&#39;=>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[&#39;name&#39;] = array(array(&#39;like&#39;,&#39;%a%&#39;), array(&#39;like&#39;,&#39;%b%&#39;), array(&#39;like&#39;,&#39;%c%&#39;), &#39;ThinkPHP&#39;,&#39;or&#39;);
ログイン後にコピー

最后的查询条件是:

(`name` LIKE &#39;%a%&#39;) OR (`name` LIKE &#39;%b%&#39;) OR (`name` LIKE &#39;%c%&#39;) OR (`name` = &#39;ThinkPHP&#39;)
ログイン後にコピー

组合查询

组合查询用于复杂的查询条件,如果你需要在查询的时候同时偶尔使用字符串却又不希望丢失数组方式的灵活的话,可以考虑使用组合查询。

组合查询的主体还是采用数组方式查询,只是加入了一些特殊的查询支持,包括字符串模式查询(_string)、复合查询(_complex)、请求字符串查询(_query),混合查询中的特殊查询每次查询只能定义一个,由于采用数组的索引方式,索引相同的特殊查询会被覆盖。

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

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

$User = M("User"); // 实例化User对象
$map[&#39;id&#39;] = array(&#39;neq&#39;,1);
$map[&#39;name&#39;] = &#39;ok&#39;;
$map[&#39;_string&#39;] = &#39;status=1 AND score>10&#39;;
$User->where($map)->select();
ログイン後にコピー

最后得到的查询条件就成了:

( `id` != 1 ) AND ( `name` = &#39;ok&#39; ) AND ( status=1 AND score>10 )
ログイン後にコピー

二、请求字符串查询方式

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

$map[&#39;id&#39;] = array(&#39;gt&#39;,&#39;100&#39;);
$map[&#39;_query&#39;] = &#39;status=1&score=100&_logic=or&#39;;
ログイン後にコピー

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

三、复合查询

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

$where[&#39;name&#39;] = array(&#39;like&#39;, &#39;%thinkphp%&#39;);
$where[&#39;title&#39;] = array(&#39;like&#39;,&#39;%thinkphp%&#39;);
$where[&#39;_logic&#39;] = &#39;or&#39;;
$map[&#39;_complex&#39;] = $where;
$map[&#39;id&#39;] = array(&#39;gt&#39;,1);
ログイン後にコピー

查询条件是

( id > 1) AND ( ( name like &#39;%thinkphp%&#39;) OR ( title like &#39;%thinkphp%&#39;) )
ログイン後にコピー

复合查询使用了_complex作为子查询条件来定义,配合之前的查询方式,可以非常灵活的制定更加复杂的查询条件。

很多查询方式可以相互转换,例如上面的查询条件可以改成:

$where[&#39;id&#39;] = array(&#39;gt&#39;,1);
$where[&#39;_string&#39;] = &#39; (name like "%thinkphp%") OR ( title like "%thinkphp") &#39;;
ログイン後にコピー

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

多次调用

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

$map[&#39;a&#39;] = array(&#39;gt&#39;,1);
$where[&#39;b&#39;] = 1;
$Model->where($map)->where($where)->where(&#39;status=1&#39;)->select();
ログイン後にコピー

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

关于ThinkPHP中where()方法的使用,本文就介绍这么多,希望对您有所帮助,谢谢!

相关推荐:

ThinkPHP中redirect用法分析

以上がThinkPHP での where() の使用方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 Mar 28, 2025 pm 05:12 PM

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? Apr 01, 2025 pm 03:12 PM

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

See all articles