ホームページ  >  記事  >  バックエンド開発  >  複数のデータベース接続を実装するための ThinkPHP ソリューション_PHP チュートリアル

複数のデータベース接続を実装するための ThinkPHP ソリューション_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:26:29661ブラウズ

ThinkPHP が複数のデータの接続を実装する場合、データベースが同じサーバー内にある場合は、次のようにモデルを定義するだけで済みます:

リーリー

その後、D("Members") のようにモデルをインスタンス化し、通常のモデルのように操作できます。
しかし、後で彼のデータベースが 2 つの異なるサーバー上にあることが判明したため、上記の方法は機能しませんでした。
このとき、TPのマルチデータ接続機能を使用する必要があります。

これに関して、テストと修正のために公式ドキュメントを参照した結果、次の解決策を思いつきました:

マルチデータ接続を確立するには、まずデータベース構成パラメータを構築する必要があります。ただし、複数のデータベース接続を確立するたびにデータベース構成配列を作成する場合は、非常に面倒になりますので、構成ファイルに記述した方がよいでしょう。ここに書くにはまだある程度のスキルが必要です。

リーリー

この時点で、C("DB_BBS") と C("DB_NEWS") を使用してデータベース構成配列を取得できます。
構成が完了したら、モデルをインスタンス化する必要があります。私たちのモデルは 2 つの異なるデータベース接続を使用する必要があるため、UserModel.class.php などの特定のテーブルのモデルを作成すると、プロジェクト構成ファイルはデフォルトでデータベース構成になります。 D("User"); を使用しても、現在のデフォルト データベースに User テーブルが存在しない場合は、エラーが報告されます。そこで、空のモデルを構築します。空のモデルはテーブルを選択しません。
空のモデルを作成するには 2 つの方法があります。 $dao=D(); と $dao=new Model(); は両方とも OK です。

リーリー
モデルをインスタンス化した後、データベース モデルを追加する必要があります。

リーリー

この addConnect() について話しましょう。この関数のプロトタイプは 1.0.3 と 1.0.4 で異なります。
1.0.3 のプロトタイプは次のとおりです:



リーリー

1.0.4 のプロトタイプは次のとおりです:


リーリー

3 番目のパラメータがありません。
最初のパラメータはデータベースの構成配列で、2 番目のパラメータは追加された接続の番号です。この番号は、データベース接続を切り替えるときに接続のシリアル番号として指定する必要があります。組み込みのデータベース接続のシリアル番号は 0 であるため、追加のデータベース接続のシリアル番号は 1 から開始する必要があることに注意してください。 2 つのデータベースが同じ接続である場合、3 番目のパラメーターは true になります

;
データベース接続を追加した後、いつでもデータベース接続を切り替えることができます。たとえば、DB_NEWS データベースを使用したい場合は、次のように書きます:

リーリー

データベース接続はここでのみ確立され、テーブルの選択がないため、次にテーブルを選択する必要があります。
ここでのテーブル名は、テーブルのプレフィックスとテーブル名を加算した完全な名前であることに注意してください。データベースに接続するための構成配列にプレフィックスがないためです。定義できるはずだと思いますが、わかりません。今のところはそれだけです。

リーリー

その後は、このモデルを通常のモデルと同じように使用できます。
たとえば、渡された ID を持つユーザーのすべての情報をクエリしたいとします:

リーリー

クエリが成功したかどうかを確認できます。
リーリー

今 DB_BBS データベース テーブルを使用したい場合は、接続を再度切り替えてください。
リーリー

次に、クエリするテーブルを選択します。モデルを切り替えた後はテーブルを再度選択する必要があり、選択しないとエラーが発生することに注意してください。

その後は再び通常のモデルと同様に操作できるようになります。
以下はマニュアルのいくつかの問題を指摘しています:

1. マルチデータベース接続をインスタンス化するときに、空ではないモデルが確立されます。 (私の書き方が間違っていたようです。)これは間違いがあるかもしれません。空のモデルを構築することをお勧めします
2. addConnect() のパラメータはバージョンによって異なり、マニュアルには記載されていません。 3. 空のモデルを確立した後、テーブルを選択する必要がありますが、このマニュアルには記載されていません。

上記の点を考慮して、ThinkPHP ユーザーは、異なるバージョンに応じて、適切な調整を行うことができます。



http://www.bkjia.com/PHPjc/824678.html

www.bkjia.com

tru​​ehttp://www.bkjia.com/PHPjc/824678.html技術記事 ThinkPHP が複数のデータの接続を実装する場合、データベースが同じサーバー内にある場合は、次のようにモデルを定義するだけで済みます。 class MembersModel extends Model{protected $trueTableName =...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。