ホームページ >バックエンド開発 >PHPチュートリアル >ThinkPHP3.1 クイックスタート (4) 連続操作
前回の記事ではクエリ言語の使い方について詳しく説明しましたが、クエリ言語はクエリや操作条件の問題を解決するだけであり、より連携するにはモデルが提供する一貫した操作メソッドを使用する必要があります。
はじめに
継続的な操作により、コードの明確さとデータ アクセスの開発効率が効果的に向上し、すべての CURD 操作がサポートされます。これは、ThinkPHP の ORM のハイライトでもあります。使用方法も比較的簡単です。ステータス 1 を満たす User テーブルの最初の 10 レコードをクエリし、ユーザーの作成時間で並べ替えたい場合、コードは次のようになります。 >where('status=1' )->order('create_time')->limit(10)->select();
ここでの where、order、limit メソッドはコヒーレント操作メソッドと呼ばれます。 select メソッドは最後に配置する必要があります (select メソッドはコヒーレントな操作メソッドではないため)。たとえば、次のコードは上記のコードと同等です。 ->order('create_time')->limit( 10)->where('status=1')->select();
実際、クエリ メソッドだけでなく、一貫した操作を使用できるすべてのメソッドCURD メソッドを使用できます。例:
$User-> ;where('id=1')->field('id,name,email')->find(); ;where('status=1 and id=1')-> ;delete();
コヒーレント操作は、現在のクエリまたは操作に対してのみ有効です。完了後、コヒーレント操作に渡されたすべての値は次のようになります。自動的にクリアされます (キャッシュ コヒーレント操作など、現在渡された値を記録する特別なコヒーレント操作がいくつかあります)。つまり、コヒーレントな操作の結果は後続のクエリには引き継がれません。
システムでサポートされているコヒーレントな操作メソッドは次のとおりです: メソッド
関数
サポートされているパラメータのタイプ
where 条件の定義のクエリまたは更新に使用されます 文字列、配列、およびオブジェクト
table の定義に使用されます実行する操作 データ テーブル名 文字列と配列
alias 現在のデータ テーブルの別名を定義するために使用されます 文字列
data データを追加または更新する前にデータ オブジェクトを割り当てるために使用されます 配列とオブジェクト
field 実行するフィールドを定義するために使用されますqueried (フィールド除外をサポート) 文字列と配列
order 結果の並べ替えに使用されます 文字列と配列
limit クエリ結果の数を制限するために使用されます 文字列と数値
page クエリのページングに使用されます (内部で制限に変換されます) 文字列と数値
group クエリのグループサポートに使用 文字列
having クエリのサポートに使用 文字列
join* クエリの結合サポートに使用 文字列と配列
union* クエリの結合に使用 文字列、配列、オブジェクトをサポート
distinct クエリの個別のブール値のサポート
lock データベースのブール値のロック メカニズム
cache クエリ キャッシュの場合 複数のパラメータをサポート (キャッシュのセクションで詳しく説明します)
に関して 問い合わせを関連付けるためにリレーションが使用されます (サポートを拡張する必要があります) string.String、array すべての連続した操作は現在のモデル インスタンス オブジェクト (this) を返し、* でマークされた操作は複数の呼び出しをサポートします。 使用法コヒーレント操作の使用には複数のメソッドの共同使用が含まれることが多いため、各コヒーレント操作の基本的な使用法を以下に簡単に紹介します: WHERE where は、条件の定義をクエリまたは更新するために使用されます。使用方法 where($where) パラメータ where (必須): クエリまたは操作条件、文字列、配列、オブジェクトをサポート 戻り値 現在のモデルインスタンス 備考 where メソッドが呼び出されない場合、更新と削除デフォルトでは実行されません。 操作 メソッドは、最も一般的に使用されるコヒーレント操作メソッドです。詳細な使用方法については、「クイック スタート (3) クエリ言語」を参照してください。
テーブル
table 操作するデータ テーブルの名前を定義し、現在の操作のデータ テーブルの名前を動的に変更します。接頭辞を含むデータ テーブルの完全な名前を記述する必要があります。エイリアスとクロスを使用できます。データベース操作
使用法 table($table)
パラメータ table (必須): データテーブル名、複数のテーブルの操作をサポート、文字列、配列、オブジェクトをサポート
戻り値 現在のモデルインスタンス
備考 table メソッドが呼び出されない場合、モデルに対応する、またはモデルによって定義されたデータ テーブルが自動的に取得されます
使用例:
$Model->Table('think_user user')->where('status>1')-> select();
table メソッドでライブラリ間の操作を実行することもできます。例:
$Model->Table('db_name.think_user user')->where('status>1')- >select();
Table メソッドのパラメーターは文字列と配列をサポートしています。配列モードでの使用法:
$Model->Table(array('think_user'=>'user','think_group'=>) ;'group'))->where('status>1')->select();
配列定義を使用する利点は、テーブル名とキーワード間の競合によるエラーを回避できることです。
通常の状況では、テーブルメソッドを呼び出す必要はありません。現在のモデルに対応する、または現在のモデルによって定義されたデータテーブルがデフォルトで自動的に取得されます。
DATA
dataは、データを追加または保存する前にデータオブジェクトを割り当てるために使用できます
使用法データ($data)
パラメータ data (必須): データ、配列とオブジェクトをサポートします
戻り値 現在のモデルインスタンス
備考 data メソッドが呼び出されない場合、現在のデータ オブジェクト、または add および save で渡されたデータが取得されます
使用例:
$Model->data($data)->add() ;
$Model->data($data)->where('id=3')->save();
Data メソッドのパラメーターは、オブジェクトの場合はオブジェクトと配列をサポートします。自動的に配列に変換されます。値を割り当てるデータ メソッドを定義していない場合は、create メソッドを使用するか、手動でデータ オブジェクトに値を割り当てることもできます。
データ オブジェクトの作成に加えて、モデルの data メソッドは現在のデータ オブジェクトを読み取ることもできます。
例:
$this->find(3);
$data = $this->data () ;
FIELD
field クエリ対象のフィールドを定義するために使用されます
使用法 field($field,$excect=false)
パラメータ
field (必須): フィールド名、文字列と文字列をサポート配列。フィールド エイリアスの指定をサポートします。true の場合は、データ テーブルの明示的なフィールドまたはすべてのフィールドを意味します。
例外 (オプション): 除外するかどうか。デフォルトは false です。true の場合、定義されたフィールドがフィールド パラメーター定義を除くデータ テーブル内のすべてのフィールドであることを意味します。
戻り値 現在のモデルインスタンス
備考 フィールドメソッドが呼び出されない場合、デフォルトですべてのフィールドが返されます。これはフィールド ('*') と同等です
使用例:
$Model- >field(' id,nickname as name')->select();
$Model->field(array('id','nickname'=>'name'))->select( );
if フィールド メソッドが呼び出されない場合、またはフィールド メソッドに渡されるパラメーターが空の場合、フィールド ('*') を使用するのと同じです。
すべてのフィールドを明示的に渡す必要がある場合は、次のメソッドを使用できます:
$Model->field(true)->select();
ただし、必要なフィールド名のみを取得することをお勧めします。明示的に指定するか、フィールドの除外によって定義します。例:
$Model->field('status',true)->select();
は、ステータスを除くすべてのフィールドを取得することを意味します。
ORDER
orderは操作結果を並べ替えるために使用されます
使用法order($order)
パラメータ order (必須): 並べ替えられたフィールド名、文字列と配列をサポート、複数フィールドの並べ替えをサポートします
戻り値現在のモデルインスタンス
備考 order メソッドが呼び出されない場合、データベースのデフォルトのルールに従います
使用例:
order('id desc')
ソートメソッドは複数フィールドのソートをサポートします
order ('status desc,id asc')
order メソッドのパラメータは文字列と配列をサポートしています。配列の使用法は次のとおりです:
order(array('status'=>'desc','id') )
LIMIT
limit は、クエリされる結果の制限を定義するために使用されます (すべてのデータベース タイプをサポートします)
使用制限($limit)
パラメータ制限 (必須): 制限数量、文字列をサポートします
戻り値 現在のモデルインスタンス
注:limit メソッドが呼び出されない場合は、制限がないことを意味します
注:limit メソッドが呼び出されない場合は、制限がないことを意味します。
limit の使用法はデータベースの種類によって異なることはわかっていますが、ThinkPHP での使用法は常に統一されたメソッド、つまり、limit(' です。 offset,length') は、Mysql、SqlServer、Oracle データベースのいずれであっても、このように使用され、システムのデータベース ドライバー クラスがこの違いを解決する役割を果たします。
使用例:
limit('1,10')
は同等の次の方法でも書くことができます:
limit(1,10)
limit('10')を使用する場合
limit('0,10') と同等
PAGE
page は、クエリされるデータ ページングを定義するために使用されます
使用法ページ($page)
パラメータ ページ (必須):ページング、サポートされています String
戻り値 現在のモデル インスタンス
備考 なし
Page 操作メソッドは、ページング クエリをより高速に実行できる新機能です。
Page メソッドの使用法は、limit メソッドと似ています。形式は次のとおりです。
Page('page[,listRows]')
Page は現在のページ数を表し、listRows は各ページに表示されるレコードの数を表します。ページ。例:
Page('2,10')
は、各ページに 10 件のレコードが表示される場合、2 ページ目のデータが取得されることを意味します。
次の書き込みメソッドは同等です:
Page(2,10);
listRow 書き込まれない場合は、limit('length') の値が読み取られます。例:
limit(25)->page (3 );
は、各ページに 25 件のレコードを表示した場合に、3 ページ目のデータが取得されることを意味します。
制限が設定されていない場合、デフォルトでは 1 ページあたり 20 レコードが表示されます。
page メソッドは、2 番目のパラメーターのサポートを追加します。例:
$this->page(5,25)->select();
と以前の使用法
$this->limit(' 5, 25')->select();
と同等。
GROUP
データベースのグループグループクエリサポート
使用法 group($group)
パラメータ group (必須): グループのフィールド名、文字列をサポート
戻り値 現在のモデルインスタンス
備考 なし
使用例:
group('user_id')
グループメソッドパラメータは文字列のみをサポートします
HAVING
クエリサポートを持つデータベースのhaving
Usage getting($having)
パラメータhaving (必須) : を持ち、文字列をサポートします
戻り値 現在のモデル インスタンス
備考 なし
使用例:
having('user_id>0')
having メソッドのパラメーターは文字列のみをサポートします
JOIN
データベース結合用のjoinクエリサポート
使用法 join($join)
パラメータ join (必須): 結合操作、文字列と配列をサポート
戻り値 現在のモデルインスタンス
備考 join メソッドは複数の呼び出しをサポートします
使用例:
$Model->join(' work ON Artist.id = work.artist_id')->join('card ON Artist.card_id = Card.id')->select();
LEFT JOIN メソッドは次のとおりです。他の JOIN メソッドを使用する必要がある場合は、
$Model->join('RIGHT JOIN work ON Artist.id = work.artist_id')-> ;select();
に変更できます。 join メソッドのパラメータが配列の場合、join メソッドは 1 回のみ使用でき、文字列メソッドと混合することはできません。
例:
join(array('work ON Artist.id = work.artist_id','card ON Artist.card_id = Card.id'))
UNION
データベースのユニオンクエリサポート
使用法 Union($union,$all=false)
パラメータ Union (必須): Union 演算、文字列、配列、オブジェクトをサポート
all (オプション): UNION ALL 演算を使用するかどうか、デフォルトは false
Return value 現在のモデル インスタンス
備考 Union メソッドは複数の呼び出しをサポートします
使用例:
$Model->field('name')
- ->table('think_user_0')
->union( ' SELECT name FROM think_user_1')
-->union('SELECT name FROM think_user_2')
-->select();
配列の使用法:
$Model->field('name')
->table('think_user_0')
->union(array('field'=>'name','table'=>'think_user_1'))
️ 'name') ->table('think_user_0') -->union(array('SELECT name FROM think_) user_1','think_user_2 から名前を選択')) ->select() ;次のような UNION ALL 操作をサポートします: $Model->field('name') ->table('think_user_0') - ->union('SELECT name FROM think_user_1', true) - >union('think_user_2 から名前を選択',true) ->select();
Union ( array ( ' SELECT ' out ' を使って out 's back 's through ‐ through ‐ ‐ ‐‐‐‐> を通して;
注: UNION 内の SELECT ステートメントには同じ数の列が必要です。列にも同様のデータ型が必要です。また、各 SELECT ステートメント内の列の順序は同じである必要があります。 DISTINCT distinctは、データのクエリ時に一意のフィルタリングを実行します 使用法distinct($distinct)パラメータdistinct(必須):distinctを使用するかどうか、ブール値をサポートします戻り値現在のモデルインスタンス備考なし使用例:
$Model->Distinct(true)->field('name')->select();
LOCK
ロックはクエリまたは書き込みロックに使用されます
使用法 Lock($lock)
パラメータ Lock (必須): ロックが必要かどうか、ブール値をサポート
戻り値 現在のモデルインスタンス
備考 join メソッドは複数の呼び出しをサポートします
Lock メソッドは、データベース で、クエリまたは操作の実行時に
lock(true)
を使用すると、生成された SQL ステートメントの最後に FOR UPDATE または FOR UPDATE NOWAIT (Oracle データベース) が自動的に追加されます。
VALIDATE
validateはデータの自動検証に使用されます
使い方 Validate($validate)
パラメータ validate(必須):自動検証定義
戻り値 現在のモデルインスタンス
備考 のみ使用可能create メソッドとの併用 データの自動検証のために
validate メソッドと組み合わせて使用されます。これについては、データ検証セクションで詳しく説明します。
AUTO
autoは自動データ補完に使用されます
使用方法auto($auto)
パラメータauto(必須): 自動補完を定義します
戻り値現在のモデルインスタンス
備考au toメソッドは以下のことができますcreate メソッドでのみ使用できます。 メソッドの使用法
auto メソッドは、データの自動補完に使用されます。具体的な使用方法は、データの自動補完セクションで説明します。
SCOPE
scopeはモデルの名前付きスコープに使用されます
使用法 Scope($scope)
パラメータ Scope (必須): 名前付きスコープ定義
戻り値 現在のモデルインスタンス
備考 スコープメソッド実際には一貫性があります 操作の事前定義
scope メソッドの特定の使用法は以下を参照できます:scope という名前の 3.1 の新機能
FILTER
filter はデータの安全なフィルタリングに使用されます
usage filter($filter)
パラメータ filter (必須): フィルタ メソッド名
戻り値 現在のモデル インスタンス
備考 フィルタ メソッドは通常、書き込みおよび更新操作に使用されます
フィルタ メソッドは、データ オブジェクトの安全なフィルタリングに使用されます。例:
$Model->data($ data)->filter('strip_tags')->add();
現在、filter メソッドは複数のメソッドによるフィルタリングをサポートしていません。
まとめ
コヒーレント操作はデータ操作に大きな利便性をもたらし、SQLで実現できる操作が基本的にThinkPHPのコヒーレント操作で実装できる限り、データベース間の表現の違い、移植性を考慮する必要はありません。変数の操作や取得方法については後ほど説明します。
上記は ThinkPHP3.1 クイックスタート (4) 一貫した操作の内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) をご覧ください。