鍍金池/ 教程/ PHP/ 基本用法
Laravel Cashier
Eloquent ORM
HTTP 響應(yīng)
發(fā)行說明
擴(kuò)展包開發(fā)
HTTP 控制器
事件
擴(kuò)展框架
Contracts
開發(fā)
配置
表單驗證
錯誤與日志
Hashing
貢獻(xiàn)指南
郵件
Session
遷移與數(shù)據(jù)填充
查詢構(gòu)造器
Redis
升級向?qū)?/span>
概覽
緩存
服務(wù)提供者
Envoy 任務(wù)執(zhí)行器
隊列
單元測試
服務(wù)容器
文件系統(tǒng) / 云存儲
認(rèn)證
請求的生命周期
加密
模板
視圖 (View)
Laravel Homestead
Laravel 安裝指南
介紹
Command Bus
分頁
輔助方法
應(yīng)用程序結(jié)構(gòu)
HTTP 路由
HTTP 請求
基本用法
本地化
HTTP 中間件
結(jié)構(gòu)生成器
Facades
Laravel Elixir

基本用法

配置

Laravel 讓連接數(shù)據(jù)庫和執(zhí)行查找變得相當(dāng)容易。數(shù)據(jù)庫相關(guān)配置文件都在 config/database.php。 在這個文件你可以定義所有的數(shù)據(jù)庫連接,以及指定默認(rèn)的數(shù)據(jù)庫連接。默認(rèn)文件中已經(jīng)有所有支持的數(shù)據(jù)庫系統(tǒng)例子了。

目前 Laravel 支持四種數(shù)據(jù)庫系統(tǒng): MySQL、Postgres、SQLite、以及 SQL Server。

讀取/寫入連接

有時候你可能希望使用特定數(shù)據(jù)庫連接進(jìn)行 SELECT 操作,同時使用另外的連接進(jìn)行 INSERT 、 UPDATE 、以及 DELETE 操作。 Laravel 讓這些變得輕松簡單,并確保你不論在使用原始查找、查找構(gòu)建器、或者是 Eloquent ORM 使用的都是正確的連接。

來看看如何配置讀取/寫入連接,讓我們來看以下的例子:

'mysql' => [
    'read' => [
        'host' => '192.168.1.1',
    ],
    'write' => [
        'host' => '196.168.1.2'
    ],
    'driver'    => 'mysql',
    'database'  => 'database',
    'username'  => 'root',
    'password'  => '',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
],

注意我們加了兩個鍵值到配置文件數(shù)組中: readwrite。 兩個鍵值都包含了單一鍵值的數(shù)組:host。readwrite 的其余數(shù)據(jù)庫配置會從 mysql 數(shù)組中合并。 所以,如果我們想要覆寫配置值,只要將選項放入 readwrite 數(shù)組即可。 所以在上面的例子里, 192.168.1.1 將被用作「讀取」連接,而 192.168.1.2 將被用作「寫入」連接。數(shù)據(jù)庫憑證、 前綴、字符編碼配置、以及其他所有的配置會共用 mysql 數(shù)組里的配置。

執(zhí)行查找

如果配置好數(shù)據(jù)庫連接,就可以通過 DB facade 執(zhí)行查找。

執(zhí)行 Select 查找

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

select 方法會返回一個 array 結(jié)果。

執(zhí)行 Insert 語法

DB::insert('insert into users (id, name) values (?, ?)', [1, 'Dayle']);

執(zhí)行 Update 語法

DB::update('update users set votes = 100 where name = ?', ['John']);

執(zhí)行 Delete 語法

DB::delete('delete from users');

注意: update 和 delete 語法會返回在操作中所影響的數(shù)據(jù)筆數(shù)。

執(zhí)行一般語法

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

監(jiān)聽查找事件

你可以使用 DB::listen 方法,去監(jiān)聽查找的事件:

DB::listen(function($sql, $bindings, $time)
{
    //
});

數(shù)據(jù)庫事務(wù)處理

你可以使用 transaction 方法,去執(zhí)行一組數(shù)據(jù)庫事務(wù)處理的操作:

DB::transaction(function()
{
    DB::table('users')->update(['votes' => 1]);

    DB::table('posts')->delete();
});

注意:在 transaction 閉包若拋出任何異常會導(dǎo)致事務(wù)自動回滾。

有時候你可能需要自己開始一個事務(wù):

DB::beginTransaction();

你可以通過 rollback 的方法回滾事務(wù):

DB::rollback();

最后,你可以通過 commit 的方法提交事務(wù):

DB::commit();

獲取連接

若要使用多個連接,可以通過 DB::connection 方法取用:

$users = DB::connection('foo')->select(...);

你也可以取用原始底層的 PDO 實例:

$pdo = DB::connection()->getPdo();

有時候你可能需要重新連接到特定的數(shù)據(jù)庫:

DB::reconnect('foo');

如果你因為超過了底層 PDO 實例的 max_connections 的限制,需要關(guān)閉特定的數(shù)據(jù)庫連接,可以通過 disconnect 方法:

DB::disconnect('foo');

查找日志紀(jì)錄

Laravel 可以在內(nèi)存里訪問這次請求中所有的查找語句。然而在有些例子下要注意,比如一次添加 大量的數(shù)據(jù),可能會導(dǎo)致應(yīng)用程序耗損過多內(nèi)存。 如果要啟用日志,可以使用 enableQueryLog 方法:

DB::connection()->enableQueryLog();

要得到執(zhí)行過的查找紀(jì)錄數(shù)組,你可以使用 getQueryLog 方法:

$queries = DB::getQueryLog();