Laravel 數據庫實例教程 —— 使用DB門面操作數據庫


Laravel支持多種數據庫,包括MySQL、Postgres、SQLite和SQL Server,在Laravel中連接數據庫和查詢數據庫都非常簡單,我們可以使用多種方式與數據庫進行交互,包括原生SQL語句、查詢構建器以及Eloquent ORM。本節我們先演示如何使用原生SQL在Laravel應用中對數據庫進行增刪改查。

 

使用DB門面進行增刪改查

1 插入數據

我們使用DB門面執行原生SQL語句,插入操作使用DB門面的insert方法,代碼如下:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;

use DB;

class TestController extends Controller
{

/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{

    DB::insert('insert into users (id, name, email, password) values (?, ?, ? , ? )',
        [1, 'Laravel','laravel@test.com','123']);
    DB::insert('insert into users (id, name, email, password) values (?, ?, ?, ? )',
        [2, 'Academy','academy@test.com','123']);

    }
}

 

 

2 查詢語句

查詢操作使用DB門面的select方法,代碼如下:

$user = DB::select('select * from users where id = ?', [1]);
dd($user);

我們還 可以看到在執行查詢的時候使用了參數綁定,以避免SQL注入。除此之外還可以使用命名綁定:

$user = DB::select('select * from users where id = :id', [':id'=>1]);

效果一樣。

 

 

3 更新語句

更新表記錄可以使用DB門面的update方法,該方法返回受影響的行數:

 

$affected = DB::update('update users set name="LaravelAcademy" where name = ?', ['Academy']);
echo $affected;

更新多少返回多少,如果沒有更新任何記錄則返回0。

4 刪除語句

刪除表記錄使用DB門面的delete方法,和update類似,該方法返回被刪除的行數:

$deleted = DB::delete('delete from users');
echo $deleted;

表數據都被我們刪除了(刪除要帶條件,不然...)

 

5 通用語句

除了上述這些DML(insert/update/delete)和DQL(select)語句,SQL語句還包括DCL(create/drop等)和DDL(grant等),要運行后者,我們可以調用DB門面的statement方法:

DB::statement('drop table users');

執行完該語句后,數據表users會被刪除。

 

 

 

4、監聽查詢事件

除此之外,我們還可以通過DB門面的listen方法監聽查詢事件,比如我們在記錄日志和調試的時候這會給我們確定問題提供便利,可以在服務提供者的boot方法中注冊該監聽器,例如我們在AppServiceProviderboot方法中定義監聽器如下:

/**
* 啟動所有應用服務
*
* @return void
*/
public function boot()
{
    DB::listen(function($sql, $bindings, $time) {
        echo 'SQL語句執行:'.$sql.',參數:'.json_encode($bindings).',耗時:'.$time.'ms';
    });
}

這樣我們運行如下SQL語句:

DB::insert('insert into users (id, name, email, password) values (?, ?, ? , ? )',
    [3, 'LaravelAcademy','laravel-academy@test.com','123']);

則瀏覽器會輸出如下內容:

SQL語句執行:insert into users (id, name, email, password) values (?, ?, ? , ? ),參數:[3,"LaravelAcademy","laravel-academy@test.com","123"],耗時:1.26ms

 

5、數據庫事務

很多時候,我們需要執行一連串操作,而其中任何一個操作出錯則整個流程失敗,需要回退重來,這個時候我們就要用到數據庫事務。

DB門面提供兩種方式支持數據庫事務,一種是調用transaction方法然后傳入閉包作為參數,我們將需要進行事務操作的邏輯放到閉包函數內:

DB::transaction(function () {
    DB::table('users')->update(['id' => 1]);
    DB::table('posts')->delete();
});

另一種是 beginTransaction、 rollBack和 commit三個方法一起使用從而構建一個完整的事務操作:

DB::beginTransaction();
if($somethingIsFailed){
    DB::rollback();
    return false;
}
DB::commit();

此外,使用DB門面提供的事務還支持查詢構建器和Eloquent ORM數據庫操作。

 

 

 

 

轉:http://laravelacademy.org/post/854.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM