1. 程式人生 > >Laravel 資料庫例項教程 —— 使用查詢構建器對資料庫進行增刪改查

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);

對應輸出為:

原生表示式