PHP框架Laravel中使用UUID实现数据分表操作示例

本文实例讲述了PHP框架Laravel中使用UUID实现数据分表操作。分享给大家供大家参考,具体如下:

UUID

UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。

说的简单点,它就是通过一个规则(如:业务标识号+年月日+当日自增数字格式化)生成的一个具有唯一性的辨识资讯。用于关联我们的一些额数据和资讯。

实例

之前在做一个项目的时候用到这个东西,现在我就用Laravel框架写一个简单的demo

前端form表单

<!DOCTYPE html>
<html>
  <head></head>
  <body>
    <form action="/addMysql" method="post">
      {!!csrf_field()!!}
      <table>
        <tr>
          <th style="colspan:2">注册</th>
        </tr>
        <tr>
          <td>账号</td>
          <td>
            <input type="text" name="uname" value="" />
          </td>
        </tr>
        <tr>
          <td>密码</td>
          <td>
            <input type="password" name="pwd" value="" />
          </td>
        </tr>
        <tr>
          <td>性别</td>
          <td>
            <input type="radio" name="sex" value="1" />:男
            <input type="radio" name="sex" value="0" />:女
          </td>
        </tr>
        <tr>
          <td>年龄</td>
          <td>
            <input type="text" name="age" value="" />
          </td>
        </tr>
        <tr>
          <td style="colspan:2">
            <input type="submit" value="提交" />
          </td>
        </tr>
      </table>
    </form>
  </body>
</html>

建立数据库和数据表(只建立 1 个索引表 和 8 个进行存储详细信息的子表)

原理:通过UUID的唯一特性,将一个数据的详细信息数据存在其他表中的,这个表示通过UUID随机分配出来的,索引表中只存储UUID和关键字段

表前缀统一前缀-------mall_
表 :    mall_index_user       索引表    -------uuid,uname
表0:    mall_user_0           uuid,uname,sex,age
表1:    mall_user_1
表2:    mall_user_2
表3:    mall_user_3
表4:    mall_user_4
表5:    mall_user_5
表6:    mall_user_6
表7:    mall_user_7

通过路由和控制器进行form表单提交数据向数据库插入数据

路由:

//form表单页面路由
Route::get('Mysql',function(){
  return view('home/Mysql');
});
//数据插入提交路由
Route::post('/addMysql','findMoreController@addMysql');

控制器:

//向数据库插入数据
public function addMysql(Request $request){
  $uuid =md5(uniqid(mt_rand (), true));
  $uid =hexdec(substr($uuid,0,1)) % 8;
  $sex = $request->input('sex');
  $age = $request->input('age');
  //dd($uuid);
  $uname = $request->input('uname');
  $result = DB::table('index_user')->insert(['uuid'=>$uuid,'uname'=>$uname]);
  $result1 = DB::table('user_'.$uid)->insert(['uuid'=>$uuid,'uname'=>$uname,'sex'=>$sex,'age'=>$age]);
  if($result1){
    return '1';
  }else{
    return '0';
  }
}

解:上面的$uid就是通过UUID得到的要向哪一张详细信息表中插入的表的代表号

例如:$uid=3     那么就向user_3中插入详细信息

插入成功后进行查询,先通过uname查询出UUID,通过UUID知道详细信息存储在哪张子表中.然后再进行查询

路由:

//查询页面
Route::get('findMysql',function(){
  return view('home/findMysql');
});
//查询路由
Route::post('/findMysql','findMoreController@findMysql');

控制器:

//查询
public function findMysql(Request $request){
    //dd($request);
    $uname=$request->input('uname');
    $uuid =DB::table('index_user')->where('uname','=',$uname)->value('uuid');
    $uid =hexdec(substr($uuid,0,1)) % 8;
    $userInfos=DB::table('user_'.$uid)->get();
    if($userInfos){
      return view('home/selectMysql',['userInfos'=>$userInfos]);
    }else{
      return view('home/findMysql');
    }
}

前端展示

<!DOCTYPE html>
<html>
  <head></head>
  <body>
    <form action="" method="post">
      <table>
        <tr>
          <th style="colspan:2">遍历</th>
        </tr>
        @foreach($userInfos as $userInfo)
        <tr>
          <td>性别</td>
          <td>
            <input type="text" name="" value="{{$userInfo->sex}}" />
          </td>
        </tr>
        <tr>
          <td>年龄</td>
          <td>
            <input type="text" name="" value="{{$userInfo->age}}" />
          </td>
        </tr>
        @endforeach
      </table>
    </form>
  </body>
</html>

至此,一个简单的利用UUID分表处理数据的例子就完成了。

更多关于Laravel相关内容感兴趣的读者可查看本站专题:《Laravel框架入门与进阶教程》、《php优秀开发框架总结》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

(0)

相关推荐

  • Laravel实现构造函数自动依赖注入的方法

    本文实例讲述了Laravel实现构造函数自动依赖注入的方法.分享给大家供大家参考,具体如下: 在Laravel的构造函数中可以实现自动依赖注入,而不需要实例化之前先实例化需要的类,如代码所示: <?php namespace Lio\Http\Controllers\Forum; use Lio\Forum\Replies\ReplyRepository; use Lio\Forum\Threads\ThreadCreator; use Lio\Forum\Threads\ThreadCreat

  • Laravel框架中composer自动加载的实现分析

    基础 自动加载允许你通过即用即加载的方式来加载需要的类文件,而不用每次都写繁琐的require 和include语句.因此,每一次请求的执行过程都只加载必须的类,也不不要关心类的加载问题,只要需要的时候直接使用即可. laravel 框架是通过composer 实现的自动加载. 是通过  下面的代码实现的. require_once __DIR__ . '/composer' . '/autoload_real.php'; return ComposerAutoloaderInit7b20e4d

  • Laravel中数据迁移与数据填充的详细步骤

    前言 这是一篇基础教程,对标 Laravel 文档中的数据迁移和数据填充,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍把. 关于Laravel数据库迁移的理解 最初看到laravel框架中迁移的时候,会以为这个迁移是把数据从一个数据库中迁到另一个数据库中,又或者是从一个服务器迁移到另一个服务器中.我自己学习有一个学习方法叫做顾名思义,所以所述是我的第一反应,但是学了以后发现这个迁移不是我理解中的迁移,但又不知道为什么叫做迁移,所以去百科查了一下. 迁移是指已经获得的知识.技能,甚

  • 利用php + Laravel如何实现部署自动化详解

    前言 本文主要给大家介绍了关于利用php + Laravel如何实现部署自动化的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 所谓自动化部署, 我的理解就是在用户保证代码质量的前提下, 将代码能够快速的自动部署到目标服务器上的一种手段. 实现原理 本地推送代码 -> 代码库 -> webhook 通知服务端 -> 自动拉取代码库代码 生成并且部署公钥 具体步骤参照 配置SSH公钥 1) 生成公钥 # 使用给定的 email 生成 public/private

  • Laravel实现数据库迁移与支持中文的填充

    前言 数据库迁移实际上就是对数据库库表的结构变化做版本控制,之前对数据库库表结构做修改的方式比较原始,比如说对某张库表新增了一个字段,都是直接在库表中执行alter table xxx add .. 的方式直接修改,但是这么做有些弊端,比如在开发阶段,你自己的库表修改了,还要把这句sql语句传给别人再执行一遍,这在多人协同开发时不是一种好的方式.那有没有一种方式能让我们对数据库 库表的修改做一些简单的版本控制,同时能让其他人很方便的同步我们对数据库的修改呢? 答案是我们可以使用Laravel 内

  • Laravel框架使用Seeder实现自动填充数据功能

    本文实例讲述了Laravel框架使用Seeder实现自动填充数据功能.分享给大家供大家参考,具体如下: 要查看代码,可以点击链接:https://github.com/laravel/framework Laravel自动填充数据使用的是Seeder类 <?php use Illuminate\Database\Seeder; use Illuminate\Database\Eloquent\Model; class DatabaseSeeder extends Seeder { /** * R

  • 深入解析Laravel5.5中的包自动发现Package Auto Discovery

    前言 在之前的 Laravel 版本中,安装包通常需要几个步骤,例如添加服务提供器到 app 配置文件并注册相关的 facades.现在,从 Laravel 5.5 开始,Laravel 可以自动检测并注册服务提供器和 facades. 本文不是聚焦于他是怎么用的,而是看看它的源码,是怎么实现Package Auto Discovery的. composer.json 一切的起源都是来自 composer.json ,在使用 composer 的时候,你可以在 post-autoload-dum

  • Laravel接收前端ajax传来的数据的实例代码

    最近有时间把公司的项目整理一下,并把遇到的问题解决了.那么今天也算个学习笔记吧! 最近在做一个笔记的项目,技术栈如下:vue.js + laravel + mongodb 首先不得不感叹vue的神奇,项目昨晚之后我会对整个项目中用到的技术和踩过的坑进行一个总结,今天先记录一个前端传送数据给后端,laravel接收的例子. 前端ajax插件我没有使用vue-resource,说实话,用他遇到了坑,所以使用了axios.js,很好用,而且比vue-resource还小. 来看前端代码(省略vue逻辑

  • PHP框架Laravel中使用UUID实现数据分表操作示例

    本文实例讲述了PHP框架Laravel中使用UUID实现数据分表操作.分享给大家供大家参考,具体如下: UUID UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的. 说的简单点,它就是通过一个规则(如:业务标识号+年月日+当日自增数字格式化)生成的一个具有唯一性的辨识资讯.用于关联我们的一些额数据和资讯. 实例 之前在做一个项目的时候用到这个东西,现在我就用Laravel框架写一个简单的demo 前端form表单 <!DOCTYPE html> <html&g

  • thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例

    本文实例讲述了thinkPHP5框架实现多数据库连接,跨数据连接查询操作.分享给大家供大家参考,具体如下: 1. 多数据库连接 方法1:在需要连接其他数据库的地方,使用Db::connect()方法动态连接数据库,方法参数为数据库配置的数组或字符串例如: 字符串参数: Db::connect('mysql://root:1234@127.0.0.1:3306/thinkphp#utf8'); 配置数组参数: Db::connect([ // 数据库类型 'type' => 'mysql', //

  • SQL数据分表Mybatis Plus动态表名优方案

    目录 一.应用场景 二.动态表名处理器接口实现 三.测试实现效果 一.应用场景 大家在使用Mybatis进行开发的时候,经常会遇到一种情况:按照月份month将数据放在不同的表里面,查询数据的时候需要跟不同的月份month去查询不同的表. 但是我们都知道,Mybatis是ORM持久层框架,即:实体关系映射,实体Object与数据库表之间是存在一一对应的映射关系. 比如: @Data public class Student {     private Integer id;     privat

  • MySQL/MariaDB 如何实现数据透视表的示例代码

    前文介绍了Oracle 中实现数据透视表的几种方法,今天我们来看看在 MySQL/MariaDB 中如何实现相同的功能. 本文使用的示例数据可以点此下载. 使用 CASE 表达式和分组聚合 数据透视表的本质就是按照行和列的不同组合进行数据分组,然后对结果进行汇总:因此,它和数据库中的分组(GROUP BY)加聚合函数(COUNT.SUM.AVG 等)的功能非常类似. 我们首先使用以下 GROUP BY 子句对销售数据进行分类汇总: select coalesce(product, '[全部产品]

  • laravel框架select2多选插件初始化默认选中项操作示例

    本文实例讲述了laravel框架select2多选插件初始化默认选中项操作.分享给大家供大家参考,具体如下: 项目中有发送消息功能,需要能通过搜索,多选用户,来指定发送人.使用 select2 插件来完成. select2 的 html 代码如下: <div class="form-group" id="member_group"> <label class="col-lg-3 control-label required"&g

  • Laravel框架实现model层的增删改查(CURD)操作示例

    本文实例讲述了Laravel框架实现model层的增删改查(CURD)操作.分享给大家供大家参考,具体如下: protected $table = 'user_city'; public $timestamps = false; //添加 返回id public function cityadd($data) { return $this->insertGetId($data); } //单条查找 public function getfind($id) { if($this->where('

  • Laravel中前端js上传图片到七牛云的示例代码

    以下Laravel中使用浏览器端上传图片到七牛云,下面只是做一些简单的流程实例. 1. 首先引入相应的js文件,下面是通过CDN引入的StaticfileCDN,当然也有其他很多方式下载, bower,git,官网的SDK 七牛js基于Plupload插件封装,所以需要下载Plupload,建议使用 2.1.1 ~ 2.1.9. <script src="https://cdn.staticfile.org/jquery/2.2.1/jquery.min.js"></

  • 基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例

    本文实例讲述了基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作.分享给大家供大家参考,具体如下: QueryList4教程 地址: https://doc.querylist.cc/site/index/doc/45 在ThinkPHP5代码根目录执行composer命令安装QueryList: composer require jaeger/querylist 如果出现 以下错误 Loading composer repositories with package

  • Flask框架重定向,错误显示,Responses响应及Sessions会话操作示例

    本文实例讲述了Flask框架重定向,错误显示,Responses响应及Sessions会话操作.分享给大家供大家参考,具体如下: 重定向和错误显示 将用户重定向到另一个端点,使用redirect(), 要提前中止错误请求,请使用abort()函数 from flask import abort, redirect, url_for @app.route('/') def index(): return redirect(url_for('login')) @app.route('/login')

  • yii框架创建与设置默认控制器并载入模板操作示例

    本文实例讲述了yii框架创建与设置默认控制器并载入模板操作.分享给大家供大家参考,具体如下: 一.创建控制器 在protected下的controllers文件夹中创建自定义的控制器文件,比如: IndexController.php (文件名首字母大写) IndexController.php文件中添加如下代码: class IndexController extends Controller { //创建方法,方法名称=action+方法名 public function actionInd

随机推荐