tp5 フレームワークを使用してマルチデータベース クエリを実装する方法

王林
リリース: 2020-03-04 17:56:06
転載
2759 人が閲覧しました

tp5 フレームワークを使用してマルチデータベース クエリを実装する方法

前書き:

管理職として複数のデータベースに関与する必要がある場合があります。たとえば、モール管理、ライブブロードキャスト管理、メッセージ管理など、それらはすべて独自のデータベースを持っています。このとき、複数のデータベースに接続して処理する必要があります。 thinkphp は複数のデータベース接続をサポートできます。

それにどう対処すればよいでしょうか?

1. 複数のデータベースの設定

database.php 内のデータベース情報はデフォルトで接続されます。

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
return [
  // 数据库类型
  &#39;type&#39;      => &#39;mysql&#39;,
  // 服务器地址
  &#39;hostname&#39;    => &#39;&#39;,
  // 数据库名
  &#39;database&#39;    => &#39;&#39;,
  // 数据库用户名
  &#39;username&#39;    => &#39;&#39;,
  // 数据库密码
  &#39;password&#39;    => &#39;&#39;,
  // 数据库连接端口
  &#39;hostport&#39;    => &#39;3306&#39;,
  // 数据库编码默认采用utf8
  &#39;charset&#39;     => &#39;&#39;,
  // 数据库表前缀
  &#39;prefix&#39;     => &#39;&#39;
];
ログイン後にコピー

tp5 は、database.php

(推奨チュートリアル: thinkphp チュートリアル)

追加のフォルダーにさらにいくつか作成できます。他のデータベース (database_mall、database_live、database_app など)

2. 初期化

モデル モジュールで初期化します

<?php
namespace app\admin\model;
use think\Model;
use think\Db;
class LiveRecharge extends Model
{
  protected $db_app;
  function __construct()
  {
    $this->db_app = Db::connect(&#39;database_app&#39;);
  }
}
ログイン後にコピー

3.

$this->db_app->table(&#39;order&#39;)->select();
ログイン後にコピー

を使用して、他のデータベースのデータをクエリできるようにします。

以下は完全なコードです:

<?php
namespace app\admin\model;
use think\Model;
use think\Db;
class LiveRecharge extends Model
{
  protected $db_app;
  function __construct()
  {
    $this->db_app = Db::connect(&#39;database_app&#39;);
  }
  // 获取分页
  public function getList($customer_id = &#39;&#39;,$nickname = &#39;&#39;,$paytime = &#39;&#39;,$pagesize = &#39;&#39;)
  {
    $pagesize = $pagesize && $pagesize > 0 ? $pagesize : config(&#39;default_page_size&#39;);
    $where = array();
    $where[&#39;o.type&#39;] = 3;
    if ($customer_id) {
      $where[&#39;o.uid&#39;] = $customer_id;
    }
    if ($nickname) {
      $where[&#39;c.NickName&#39;] = [&#39;like&#39;,&#39;%&#39;.$nickname.&#39;%&#39;];
    }
    if ($paytime) {
      $where[&#39;o.addtime&#39;] = array([&#39;>&#39;,$paytime.&#39; 00:00&#39;], [&#39;<&#39;,$paytime.&#39; 23:59&#39;]);
    }
    $result = $this->db_app->table(&#39;order&#39;)
      ->alias(&#39;o&#39;)
      ->where($where)
      ->join(&#39;customer c&#39;,&#39;o.uid = c.Id&#39;)
      ->field(&#39;o.*,c.NickName as nickname&#39;)->paginate($pagesize,false,[
        &#39;query&#39; => [
          &#39;customer_id&#39;=>$customer_id,
          &#39;nickname&#39;=>$nickname,
          &#39;paytime&#39;=>$paytime
        ]
      ]);
    $page = $result->render(); // 分页
    $data = $result->all(); // 数据
    foreach ($data as $k=>$v) {
      $data[$k][&#39;diamond&#39;] = intval($v[&#39;money&#39;])*10;
    }
    //    dump($this->db_app->getLastSql());
    $total_diamond = $this->db_app->table(&#39;order&#39;)->where(&#39;type&#39;,3)->sum(&#39;money*10&#39;);
    $outData[&#39;page&#39;] = $page;
    $outData[&#39;data&#39;] = $data;
    $outData[&#39;total_diamond&#39;] = $total_diamond;
    return $outData;
  }
}
ログイン後にコピー

プログラミング関連のコンテンツの詳細については、php 中国語 Web サイトの プログラミング入門 列に注目してください。

以上がtp5 フレームワークを使用してマルチデータベース クエリを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:jb51.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート