數(shù)據(jù)庫(kù)使用基礎(chǔ)

2018-12-17 10:57 更新

配置

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

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

           

讀取/寫(xiě)入連接

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

來(lái)看看如何配置讀取/寫(xiě)入連接,讓我們來(lái)看以下的例子:

'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'    => '',],

           

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

           

執(zhí)行查找

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

執(zhí)行 Select 查找

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

           

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

You may also execute a query using named bindings:

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

           

執(zhí)行 Insert 語(yǔ)法

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

           

執(zhí)行 Update 語(yǔ)法

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

           

執(zhí)行 Delete 語(yǔ)法

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

           

注意: updatedelete 語(yǔ)法會(huì)返回在操作中所影響的數(shù)據(jù)筆數(shù)。

執(zhí)行一般語(yǔ)法

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

           

監(jiān)聽(tīng)查找事件

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

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

           

           

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

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

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

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

           

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

有時(shí)候你可能需要自己開(kāi)始一個(gè)事務(wù):

DB::beginTransaction();

           

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

DB::rollback();

           

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

DB::commit();

           

           

獲取連接

若要使用多個(gè)連接,可以通過(guò) DB::connection 方法取用:

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

           

你也可以取用原始底層的 PDO 實(shí)例:

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

           

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

DB::reconnect('foo');

           

如果你因?yàn)槌^(guò)了底層 PDO 實(shí)例的 max_connections 的限制,需要關(guān)閉特定的數(shù)據(jù)庫(kù)連接,可以通過(guò) disconnect 方法:

DB::disconnect('foo');

           

           

查找日志記錄

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

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

           

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

$queries = DB::getQueryLog();


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)