Maison > cadre php > PensezPHP > le corps du texte

Comment utiliser le framework tp5 pour implémenter des requêtes multi-bases de données

王林
Libérer: 2020-03-04 17:56:06
avant
2718 Les gens l'ont consulté

Comment utiliser le framework tp5 pour implémenter des requêtes multi-bases de données

Avant-propos :

Parfois, une formation en gestion doit impliquer plusieurs bases de données. Par exemple, la gestion des centres commerciaux, la gestion des diffusions en direct, la gestion des messages, etc., ils ont tous leurs propres bases de données. À ce stade, vous devez vous connecter à plusieurs bases de données et les traiter. thinkphp peut prendre en charge plusieurs connexions à des bases de données.

Comment y faire face ?

1. Configurer plusieurs bases de données

Par défaut, les informations de la base de données dans database.php seront connectées.

<?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;
];
Copier après la connexion

tp5 chargera automatiquement database.php

(tutoriel recommandé : tutoriel thinkphp)

Nous pouvons en créer quelques autres dans le dossier supplémentaire Configuration d'autres bases de données, telles que Database_mall, Database_live, Database_app, etc.

2. Initialisation

Initialiser dans le module modèle

<?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;);
  }
}
Copier après la connexion

3. Utilisez

$this->db_app->table(&#39;order&#39;)->select();
Copier après la connexion

pour interroger des données dans d'autres bases de données.

Ce qui suit est le code complet :

<?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;
  }
}
Copier après la connexion

Pour plus de contenu lié à la programmation, veuillez faire attention à la colonne Introduction à la programmation sur le site Web PHP chinois !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:jb51.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!