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瀏覽器進行響