Laravel 資料庫例項教程 —— 使用查詢構建器對資料庫進行增刪改查
上一節我們講了如何使用DB門面對資料庫進行原生查詢,這一節我們使用另外一種方式實現對資料庫的增刪改查——查詢構建器(Query Builder)。
獲取查詢構建器很簡單,還是要依賴DB門面,我們使用DB門面的table
方法,傳入表名,即可獲取該表的查詢構建器:
$users = DB::table('users');
這樣我們就獲取到了$users
表的查詢構建器,實際上,底層返回的是Illuminate\Database\Query\Builder
的例項,我們對查詢構建器的所有操作都是呼叫該例項對應類上的方法。下面我們就列舉查詢構建器的一些常用方法,我們還是沿用上一節建立的$users
1、新增資料
使用查詢構建器的insert
方法即可插入一條/多條資料:
DB::table('users')->insert([ ['id'=>1,'name'=>'Laravel','email'=>'[email protected]','password'=>'123'], ['id'=>2,'name'=>'Academy','email'=>'[email protected]','password'=>'123'], ['id'=>3,'name'=>'LaravelAcademy','email'=>'[email protected]','password'=>'123'] ]);
執行成功後即可在資料表$users
中插入三條記錄。有時候,我們需要插入記錄後獲取自增ID,可以使用insertGetId
方法:
$insertId = DB::table('users')->insertGetId( ['name'=>'Laravel-Academy','email'=>'[email protected]','password'=>'456'] );
2、更新資料
更新表記錄很簡單,使用查詢構建器的update
方法即可:
$affected = DB::table('users')->where('name','Laravel-Academy')->update(['password'=>'123']);
該方法返回受影響的函式。
3、刪除資料
使用delete
方法刪除表記錄,刪除方法和更新方法類似,返回被刪除的行數:
$deleted = DB::table('users')->where('id', '>', 3)->delete();
如果我們是要刪除整個資料表資料,則略去where條件,如果是要清空資料表還要將自增ID置為0,可以使用truncate
方法:
DB::table('users')->truncate();
4、基本查詢
4.1 獲取所有表記錄
使用get方法即可獲取一張表的所有記錄:
$users = DB::table('users')->get(); dd($users);
列印結果如下:
如果是獲取指定列的資料,則需要加上select
條件:
$users = DB::table('users')->select('name','email')->get(); dd($users);
列印結果如下:
4.2 獲取單條記錄
獲取單條記錄需要在查詢基礎上加上first
方法:
$user = DB::table('users')->where('name','Laravel')->first(); dd($user);
則對應結果為:
4.3 分組塊獲取資料
如果資料庫包含多條資料,則一次性獲取會極大影響效能,對應地,我們可以呼叫chunk
方法分組塊獲取資料:
DB::table('users')->chunk(2,function($users){ foreach($users as $user){ // if($user->name=='LaravelAcademy') // return false; echo $user->name.'<br>'; } });
這裡我們指定每次取兩條記錄。註釋部分的意思是我們可以設定查詢退出條件,當達到該條件時,查詢退出,不再往下執行。
4.4 獲取單列的值
上述方法獲取的查詢結果都是物件例項/物件例項陣列,有時候,我們只是想簡單獲取單列的值,遍歷陣列獲取指定列的值太麻煩,可以使用lists
方法獲取列值陣列:
$users = DB::table('users')->lists('name'); dd($users);
對應的輸出為:
這樣我們就可以免去遍歷物件陣列的麻煩。
4.5 原生表示式
此外,查詢構建器還支援原生表示式,我們需要呼叫DB門面的raw
方法來實現:
$users = DB::table('users')->select(DB::raw('name,email'))->where('id','<',3)->get(); dd($users);
對應輸出為: