老莫的笔记本  
  
查看: 896|回复: 0

Laravel 应工作需求,查询双数据库,添加默认返回字段

[复制链接]

662

主题

878

帖子

5145

积分

超级版主

Rank: 8Rank: 8

积分
5145
发表于 2020-7-28 17:11:14 | 显示全部楼层 |阅读模式
Laravel  应工作需求:    1. 查询双数据库
    2. 添加另一个库的默认返回字段 addtype ,并设置其默认值
         这个就神奇了 参考网址:https://blog.csdn.net/qq_27295403/article/details/98872218

    3. 修改另一个库的字段名称
         使用
  1. select(
  2.                                             "t1.id",
  3.                                             "t1.tmNameText",
  4.                                             "t1.tmIRNumberText as tmNumberText",
  5.                                             "t1.tmClassText as ctype",
  6.                                             "t1.dateApplication as registerDate",
  7.                                             "t1.tmRightEndDate as specialEndDate",
  8.                                             "t2.priceStatus"
  9.                                             )
复制代码

    4. 实现 双分页 [从第几条  取到 第几条  ,两个库返回值 搞一样 ,这样就实现了 双数据库 一个分页数据]
          参考网址:https://blog.csdn.net/lxw1844912514/article/details/100029159
    5. 拼凑数据  使用
array_merge()
来吧: battle

    解决1  查询双数据库 ,个人建议 先添加配置 位置[config/database.php]
    在'connections'中 添加 一条键值对

  1. // 权客云数据库地址与服务器 [该账户为只读账户]
  2.         'mysql_quancloud' => [
  3.             'driver' => 'mysql',
  4.             'url' => env('DATABASE_URL'),
  5.             'host' => '********',
  6.             'port' => '*******',
  7.             'database' => '******',
  8.             'username' => '********',
  9.             'password' => '*******',
  10.             'unix_socket' => env('DB_SOCKET', ''),
  11.             'charset' => 'utf8mb4',
  12.             'collation' => 'utf8mb4_unicode_ci',
  13.             'prefix' => '',
  14.             'prefix_indexes' => true,
  15.             'strict' => true,
  16.             'engine' => null,
  17.             'options' => extension_loaded('pdo_mysql') ? array_filter([
  18.                 PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
  19.             ]) : [],
  20.         ],
复制代码

好了 添加完了,然后在控制器中这么用:
  1. DB::connection('mysql_quancloud')->table('trademark_detail ') ->where($bMap)->count();
复制代码



重要的就这么多了,然后开始上 控制器中全部代码:
  1. <?php

  2. namespace App\Http\Controllers\Out;

  3. use Illuminate\Routing\Controller as BaseController;

  4. use Illuminate\Http\Request;

  5. use Illuminate\Support\Facades\Input;

  6. use App\Model\CmsSellTrademark;

  7. use DB;

  8. // 对外暴露接口,查询可售商标
  9. class CanSellController extends BaseController
  10. {

  11.     /**
  12.      *  请求逻辑:
  13.      *      a : 本系统数据库 ;
  14.      *      b : 权客云数据库 ;
  15.      *
  16.      *      1. 带入请求条件,分别请求 a , b 内的符合条件的总数 aNum, bNum ;
  17.      *      2. 页数,请求条数 为 必填值,如果不填 有默认值 page = 1 , limit= 20 ;
  18.      *      3. page*limit = nowNum ; [为当前值]
  19.      *      4. 判断 if( nowNum <= aNum){
  20.      *                     ------如果请求数小于或等于a的总数----
  21.      *                      [只取本地内的数据]
  22.      *              } else if(nowNum>aNum ){
  23.      *                      ------如果请求数大于a的总数----
  24.      *
  25.      *                      if( nowNum < aNum+limit  ){
  26.      *                             -----且如果 处于ab之间,------
  27.      *                             [则请求a 并且请求b,然后组装 ]
  28.      *                      }else{
  29.      *                           ----直接请求b------
  30.      *
  31.      *                              从多少条起步,拿去limit的 长度  这样则不需要算页数;
  32.      *
  33.      *
  34.      *                      }
  35.      *              };
  36.      *       5. 返回值有limit, 有page  有 count , 有data [两者拼凑]
  37.      *
  38.      *
  39.      *
  40.      *
  41.      *
  42.      *
  43.      */
  44.     public function getsell(Request $request)
  45.     {

  46.         // 提取页码和条数 没有则使用默认值
  47.         $page = (int) $request->input('page');
  48.         if (empty($request->input('page'))) {
  49.             $page = 1;
  50.         }

  51.         $limit = (int) $request->input('limit');
  52.         if (empty($request->input('limit'))) {
  53.             $limit = 20;
  54.         }

  55.         // 整合请求条件a
  56.         $aMap = function ($query) use ($request) {
  57.             $query->where('id', '>', 0);
  58.         };
  59.         // 整合请求条件b
  60.         $bMap = function ($query) use ($request) {
  61.             
  62.             // $query->where('id', '>=', 50);
  63.             $query->where('t2.priceStatus', '=', 2);
  64.         };
  65.         // 整合b的最终转换
  66.         $bChangeArr = [
  67.             DB::raw('"3" as addtype'),
  68.             "t1.id",
  69.             "t1.tmNameText",
  70.             "t1.tmIRNumberText as tmNumberText",
  71.             "t1.tmClassText as ctype",
  72.             "t1.dateApplication as registerDate",
  73.             "t1.tmRightEndDate as specialEndDate",
  74.             "t2.priceStatus"
  75.             ];

  76.         // 获取 ab 的总数
  77.         $aNum =  CmsSellTrademark::where($aMap)->count();
  78.         $bNum =  DB::connection('mysql_quancloud')
  79.                     ->table('trademark_detail as t1')
  80.                     ->join('trademark_currency as t2', 't2.id', '=', 't1.businessId')
  81.                     ->where($bMap)
  82.                     ->count();

  83.         // 判断当前总条数
  84.         $nowNum = $page*$limit ;

  85.         $resData = array();
  86.          
  87.         if ($nowNum <= $aNum) {
  88.             //  ------如果请求数小于或等于a的总数---- // return '只取本地内的数据';

  89.             // 初始数据
  90.             $surplus =  $limit*($page-1);

  91.             //  分页 会自动判断 参数中的page 值 这里只需要条数就可以
  92.             $resData =  CmsSellTrademark::where($aMap)->offset($surplus)->limit($limit)->get();
  93.         } elseif ($nowNum>$aNum) {
  94.             //    ------如果请求数大于a的总数----
  95.                   
  96.             if ($nowNum < $aNum +$limit) {
  97.                 // 初始数据
  98.                 $surplus =  $limit*($page-1);
  99.                         
  100.                 //    -----且如果 处于ab之间,------  // return '则请求a 并且请求b,然后组装';
  101.                 $aResData =  CmsSellTrademark::where($aMap)->offset($surplus)->limit($limit)->get()->toArray();

  102.                 // 看一下剩余多少条
  103.                 $otherSurplus = $limit - count($aResData);

  104.                 $bResData = DB::connection('mysql_quancloud')
  105.                                         ->table('trademark_detail as t1')
  106.                                         ->join('trademark_currency as t2', 't2.id', '=', 't1.businessId')
  107.                                         ->select($bChangeArr)
  108.                                         ->where($bMap)
  109.                                         ->offset(0)
  110.                                         ->limit($otherSurplus)
  111.                                         ->get()
  112.                                         ->toArray();

  113.                 $resData = array_merge($aResData, $bResData);
  114.             } else {
  115.                 // ----直接请求b------  // 从多少条起步,拿去limit的 长度  这样则不需要算页数 ,"t2.priceRange"  priceRange为售价范围 ,priceStatus=2为售价开关   1未关 //return '直接请求b';
  116.                 $surplus = $limit*$page - $aNum;

  117.                 $resData = DB::connection('mysql_quancloud')
  118.                                         ->table('trademark_detail as t1')
  119.                                         ->join('trademark_currency as t2', 't2.id', '=', 't1.businessId')
  120.                                         ->select($bChangeArr)
  121.                                         ->where($bMap)
  122.                                         ->offset($surplus)
  123.                                         ->limit($limit)
  124.                                         ->get();
  125.             }
  126.         };

  127.         return [
  128.             'code' => 1,
  129.             'message' => '请求成功',
  130.             'count' => $aNum + $bNum,
  131.             'page' => $page ,
  132.             'limit' =>$limit,
  133.             'data' => $resData
  134.         ];
  135.     }



  136.     /**
  137.      *  设置可售的模式
  138.      *
  139.      */
  140.     public function getAB()
  141.     {
  142.     }
  143. }
复制代码













回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表