1. 程式人生 > >Laravel框架學習(使用DB門面操作資料庫 原生SQL)

Laravel框架學習(使用DB門面操作資料庫 原生SQL)

1、連線資料庫
Laravel中資料庫配置檔案為config/database.php,開啟該檔案,預設內容如下:

<?php

return [
    //預設返回結果集為PHP物件例項
    //具體返回結果可參考PDO.php(php PDO文件)
    // 陣列格式 FETCH_ASSOC
    'fetch' => PDO::FETCH_CLASS,
    //預設資料庫連線為mysql,可以在.env檔案中修改DB_CONNECTION的值
    'default' => env('DB_CONNECTION', 'mysql'),
    'connections'
=> [ //sqlite資料庫相關配置 'sqlite' => [ 'driver' => 'sqlite', 'database' => storage_path('database.sqlite'), 'prefix' => '', ], //mysql資料庫相關配置 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST'
, 'localhost'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict'
=> false, ], //Postgres資料庫相關配置 'pgsql' => [ 'driver' => 'pgsql', 'host' => env('DB_HOST', 'localhost'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'prefix' => '', 'schema' => 'public', ], //SQL Server資料庫相關配置 'sqlsrv' => [ 'driver' => 'sqlsrv', 'host' => env('DB_HOST', 'localhost'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'prefix' => '', ], ], //遷移表名稱 'migrations' => 'migrations', //Redis資料庫相關配置 'redis' => [ 'cluster' => false, 'default' => [ 'host' => '127.0.0.1', 'port' => 6379, 'database' => 0, ], ], ];

如果要修改資料庫配置資訊,去修改.env對應值即可。

APP_ENV=local
APP_DEBUG=true
APP_KEY=96FsRuVPaltujCHIDWYGNEfe7Tw6nthM

DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

2、資料庫初始化
我們在專案根目錄使用Artisan命令執行Laravel自帶的遷移生成users表和password_reset表:
這裡寫圖片描述
對應的資料庫中會生成三張表
migrations password_resets users

3、使用DB門面進行增刪改查
3.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','[email protected]','123']);
    DB::insert('insert into users (id, name, email, password) values (?, ?, ?, ? )',
        [2, 'Academy','[email protected]','123']);
    }
}

3.2 查詢語句

$user = DB::select('select * from users where id = ?', [1]);
//我們還 可以看到在執行查詢的時候使用了引數繫結,以避免SQL注入。除此之//外還可以使用命名繫結:
$user = DB::select('select * from users where id = :id', [':id'=>1]); 

dd($user);
輸出結果為:
array:1 [
  0 => {#224 
    +"id": 1
    +"name": "Laravel"
    +"email": "[email protected]"
    +"password": "123"
    +"remember_token": null
    +"created_at": "0000-00-00 00:00:00"
    +"updated_at": "0000-00-00 00:00:00"
  }
]

//可以看到select查詢返回的結果是陣列。而陣列中的每一個元素都是PHP物件
//修改database.php中的'fetch' => PDO::FETCH_CLASS, 修改為
//PDO::FETCH_ASSOC則輸出結果為陣列格式。

array:1 [
  0 => array:7 [
    "id" => 1
    "name" => "Laravel"
    "email" => "[email protected]"
    "password" => "123"
    "remember_token" => null
    "created_at" => "0000-00-00 00:00:00"
    "updated_at" => "0000-00-00 00:00:00"
  ]
]

3.3 更新語句

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

列印結果為1,(這裡返回的是受影響的行數)如果沒有更新任何記錄則返回0。

3.4 刪除語句

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

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

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

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

4、監聽查詢事件

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

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

在執行sql時,就會輸出以上記錄。可以用來監聽sql執行情況。

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資料庫操作。

相關推薦

Laravel框架學習使用DB門面操作資料庫 原生SQL

1、連線資料庫 Laravel中資料庫配置檔案為config/database.php,開啟該檔案,預設內容如下: <?php return [ //預設返回結果集為PHP物件例項 //具體返回結果可參考PDO.php(php P

Laravel框架學習資料庫高階查詢

1、連線查詢(join) 連線查詢指的是將兩張表或多張表關聯到一起進行查詢,獲取一個表的行與另一個表的行匹配的資料。常見的連線查詢包括內連線(等值連線)、左(外)連線、右(外)連線和交叉連線(完全連線)等。 我們將使用者表users和文章表posts關聯到一

laravel框架學習執行建立中介軟體後,提示無法找到該中介軟體的解決方法

按照官方提供的文件:http://laravelacademy.org/post/7812.html 1.建立中介軟體:先宣告中介軟體, php artisan make:middleware AdminMiddleware 會自動在app/Http/Middlewar

laravel框架學習 解決MySQL5.7以下資料無法遷移的方法

報錯 提示 不支援提供新的utf8字符集 第一種方法:修改字符集 修改字符集: 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 第二種方法:如果不修改字符集 修改下預設字串

laravel框架學習安裝laravel,及laravel-ide-helper增強程式碼提示

1.安裝laravel框架 使用新框架composer是必須會使用的 在PHP環境下 WWW下 直接輸入以下程式碼 composer create-project --prefer-dist laravel/laravel blog "5.4.*" 回車會自動下載lar

laravel框架學習win下php artisan tinker 測試資料時,無法執行報錯的解決方法

問題描述: 複製該路徑,在資源管理器的位址列中開啟,會看到 如下: Temp 往往是系統或者其他軟體生成的快取檔案或目錄 需要返回到上一級目錄Temp中,全選資料夾,刪除,提示不允許刪除的話,

laravel框架學習

學習laravel 前先安裝composer 首先檢查PHP版本及相關擴充套件 PHP >= 5.5.9 OpenSSL擴充套件 PDO擴充套件 Mbstring擴充套件 - 如不滿足以上條件,請修改php.ini配置或重新編譯PHP Linu

Laravel框架學習Request請求資料、Cookie、檔案上傳

1、獲取Request請求資料 Laravel中一般通過控制器方法依賴注入來獲取當前請求的Request例項。 我們通過定義一個隱式控制器來進行本章節的測試。首先我們在routes.php定義路由如下: Route::controller('reque

Laravel框架學習CSRF

CSRF攻擊原理及其防護 1、CSRF攻擊是what? CSRF是跨站請求偽造(Cross-site request forgery)的英文縮寫。具體瞭解請自行百度。 2、Laravel中如何避免CSRF攻擊 Laravel自動為每個使用者Session

Laravel框架學習中介軟體

1、中介軟體簡介 Laravel中可以把HTTP中介軟體看做“裝飾器”,在請求到達最終動作之前對請求進行過濾和處理。中介軟體在Laravel中有著廣泛的應用,比如使用者認證、日誌、維護模式、開啟Session、從Session中獲取錯誤資訊,CSRF驗證,等等

php laravel框架學習筆記 數據庫操作

true 數據 mar sql show top 一行 ati del 原博客鏈接:http://www.cnblogs.com/bitch1319453/p/6810492.html mysql基本配置 你可用通過配置環境變量,使用cmd進入mysql,當然還有一種東

框架學習1——service層,dao層和service實現類進行資料庫操作

最近也是比較忙,也只能忙裡偷閒地抓緊時間接著學習一下技術,自從上次學習了maven之後,越來越對框架產生了興趣,下了好多的spring視屏,聽著老師的建議,最近也萌生了看別人的程式碼進行學習的想法,然後就上了知乎搜了搜優秀的java框架,發現了一個比較感興趣的,

selenium + python自動化測試unittest框架學習webdriver對頁面其他控件操作

文件的 文件路徑 內容 option selenium script web 對話 對話框 1.對話框,下拉框 (1)對話框的有兩種,一種是iframe格式的,需要switch_to_iframe()進行定位,現在大部分的對話框是div格式的,這種格式的可以通過層級定位來定

Beego框架學習筆記02--Beego與資料庫操作雜記

1.資料庫重登入相關 每次關閉電腦或者關閉資料庫伺服器之後,如果想要再次操作資料庫就必須開啟資料庫伺服器。 具體過程是先執行【~/$ mysql.server start】指令,得到資料庫伺服器啟動成功提示。 MacBook-Pro:~$ mysql.server star

PythonWeb開發Django框架學習十一使用框架自帶Admin管理資料庫資料

上次說到了有關於Model類對於資料庫的資料的增刪改查操作還有一對多,多對多關係的對映操作等等。 這次呢來說一個django管理資料庫的網頁版幫手Admin管理,在我看來,這個和PHP的wamp整合開

PHP Laravel 框架學習筆記 路由器 中介軟體 基礎使用

用了近兩年Thinkphp,嘗試接觸下Laravel框架,在寫這篇文章的時候,其實我已經陸續學習了laravel一個多月,學習期間寫了個簡單的新聞管理系統,基本熟悉laravel的使用,寫這篇文章是回顧並加深所學的知識,並更深入的瞭解框架,使用更多更有意思的

Activiti工作流框架學習——使用Activiti提供的API完成流程操作

可以在專案中加入log4j,將logj4.properties檔案拷入到src目錄下,這樣框架執行的sql就可以輸出到到控制檯,log4j提供的日誌級別有以下幾種: Fatal  error  warn  info  debug  trace 一、部署流程定義 1,在工程專

Laravel摘記之DB操作資料庫

laravel中的DB類為我們提供了兩個形式來操作資料庫 原生sql語句操作資料庫 構建器操作資料庫 建立測試控制器 (1)、執行原生 SQL 語句 配置好資料庫連線以後,DB類為我們提供select、update、insert、delete等方

Laravel模型類&DB操作資料庫

一、使用DB類操作資料庫 配置好資料庫連線後,就可以使用DB類來執行查詢。DB類為每種查詢提供了相應方法:select, update, insert, delete和statement。 1、執行原生sql查詢 注意:原生sql語句中的資料表名,必須是包含字首

selenium + python自動化測試unittest框架學習webdriver元素定位

倒數 節點 大於 文本框 webdriver 而且 單標簽 unit 遍歷 1.Webdriver原理 webdirver是一款web自動化操作工具,為瀏覽器提供統一的webdriver接口,由client也就是我們的測試腳本提交請求,remote server瀏覽器進行響