PHP框架Laravel中使用UUID實現(xiàn)數(shù)據(jù)分表操作示例
本文實例講述了PHP框架Laravel中使用UUID實現(xiàn)數(shù)據(jù)分表操作。分享給大家供大家參考,具體如下:
UUID
UUID是指在一臺機器上生成的數(shù)字,它保證對在同一時空中的所有機器都是唯一的。
說的簡單點,它就是通過一個規(guī)則(如:業(yè)務(wù)標(biāo)識號+年月日+當(dāng)日自增數(shù)字格式化)生成的一個具有唯一性的辨識資訊。用于關(guān)聯(lián)我們的一些額數(shù)據(jù)和資訊。
實例
之前在做一個項目的時候用到這個東西,現(xiàn)在我就用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>
建立數(shù)據(jù)庫和數(shù)據(jù)表(只建立 1 個索引表 和 8 個進行存儲詳細信息的子表)
原理:通過UUID的唯一特性,將一個數(shù)據(jù)的詳細信息數(shù)據(jù)存在其他表中的,這個表示通過UUID隨機分配出來的,索引表中只存儲UUID和關(guān)鍵字段
表前綴統(tǒng)一前綴-------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表單提交數(shù)據(jù)向數(shù)據(jù)庫插入數(shù)據(jù)
路由:
//form表單頁面路由 Route::get('Mysql',function(){ return view('home/Mysql'); }); //數(shù)據(jù)插入提交路由 Route::post('/addMysql','findMoreController@addMysql');
控制器:
//向數(shù)據(jù)庫插入數(shù)據(jù) 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分表處理數(shù)據(jù)的例子就完成了。
更多關(guān)于Laravel相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Laravel框架入門與進階教程》、《php優(yōu)秀開發(fā)框架總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家基于Laravel框架的PHP程序設(shè)計有所幫助。
- Laravel關(guān)聯(lián)模型中過濾結(jié)果為空的結(jié)果集(has和with區(qū)別)
- Laravel模型間關(guān)系設(shè)置分表的方法示例
- Laravel模型事件的實現(xiàn)原理詳解
- laravel學(xué)習(xí)筆記之模型事件的幾種用法示例
- laravel學(xué)習(xí)教程之關(guān)聯(lián)模型
- Laravel 5框架學(xué)習(xí)之模型、控制器、視圖基礎(chǔ)流程
- Laravel框架學(xué)習(xí)筆記(二)項目實戰(zhàn)之模型(Models)
- Laravel框架數(shù)據(jù)庫CURD操作、連貫操作總結(jié)
- PHP開發(fā)框架Laravel數(shù)據(jù)庫操作方法總結(jié)
- Laravel框架模型的創(chuàng)建及模型對數(shù)據(jù)操作示例
相關(guān)文章
如何利用預(yù)加載優(yōu)化Laravel Model查詢詳解
這篇文章主要給大家介紹了關(guān)于如何利用預(yù)加載優(yōu)化Laravel Model查詢的相關(guān)資料,文章通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08Thinkphp 框架擴展之Widget擴展實現(xiàn)方法分析
這篇文章主要介紹了Thinkphp 框架擴展之Widget擴展實現(xiàn)方法,結(jié)合實例形式分析了Thinkphp 框架Widget擴展概念、原理、實現(xiàn)方法及操作注意事項,需要的朋友可以參考下2020-04-04基于Snoopy的PHP近似完美獲取網(wǎng)站編碼的代碼
基于Snoopy的PHP近似完美獲取網(wǎng)站編碼 用于php爬蟲,獲取編碼準(zhǔn)確率99.9%, 還有部分不能獲取,求大牛完善2011-10-10支持中文和其他編碼的php截取字符串函數(shù)分享(截取中文字符串)
這篇文章主要介紹了支持中文和其他編碼的php截取字符串函數(shù)示例(截取中文字符串),需要的朋友可以參考下2014-03-03