引言
我們推薦使用laravel的eloquentorm模型操作數據庫表,因為特性更為豐富,組裝更為靈活,在編程層面操作數據的來來去去非常直觀。而有些場景不可避免地與原生交互,我們本期就來梳理一下DB門面相關的那些方法。
學習時間
系統(tǒng)提供了DB門面用于原生的SQL操作,在程序內引入下面的類:
useIlluminate\Support\Facades\DB;
該類的定義很簡單,標準的門面注冊方法:
classDBextendsFacade{protectedstaticfunctiongetFacadeAccessor(){return'db';}}
僅實現了getFacadeAccessor方法,這些類處于同一個命名空間下的Facade.php文件內。
DB門面既可以使用querybuilder的鏈式操作,也可以用于執(zhí)行原生查詢。舉幾個例子。比如刪除users表:
DB::statement('droptableusers');
帶參數綁定的SQL查詢語句:
DB::select('select*fromcontactswherevalidated=?',[1]);
或者使用鏈式操作,獲取所有滿足條件的記錄:
$users=DB::table('users')->get();
當然了,還有經常用到的多表聯合查詢,復雜的查詢過濾條件:
DB::table('users')->join('contacts',function($join){$join->on('users.id','=','contacts.user_id')->where('contacts.type','donor');})->get();
CRUD
上一節(jié)是一些簡單示例,下面我們說一說增刪改查的用法。先說查詢語句,如果在數據庫優(yōu)化上做的比較好的一些SQL固定寫法,可以使用原生方法固化下來。比如簡單的:
$users=DB::select('select*fromusers');
該方法會返回一個標準對象的集合。擴展一下,帶有查詢條件的SQL原生語句,為了防止SQL注入,使用參數綁定的方式:
$usersOfType=DB::select('select*fromuserswheretype=?',[$type]);
當然也可以使用PDO常用的方式占位:
$usersOfType=DB::select('select*fromuserswheretype=:type',['type'=>$userType]);
插入新數據,其實與上述的帶有占位符參數綁定的SQL查詢語句類似,只是SQL語法不同而已:
DB::insert('insertintocontacts(name,email)values(?,?)',['salt','salt@lot.com']);
更新數據也是一樣的:
$countUpdated=DB::update('updatecontactssetstatus=?whereid=?',[1,$id]);
當然了,刪除語句僅僅需要where子句的條件參數綁定,其他與查詢select無異:
$countDeleted=DB::delete('deletefromcontactswherearchived=?',[1]);
寫在最后
本文通過對laravelDB門面的增刪改查用法,向大家展示了基本的參數綁定的用法。一般我們不推薦使用原生SQL語句操作數據庫,提倡大家把數據庫操作集中到模型層,充分利用eloquentorm的性能。
Happycoding:-)
我是@程序員小助手,持續(xù)分享編程知識,。