laravel 目前支援這四種database
在 config/database.php
要注意一下 default
是設定 mysql,接著在connection
就可以看到有上面提到的四種connection方法,其他還有像redis的資料也會在這邊。
之前提到的.env別忘了也要設定喔
DB facade 提供了幾種方法來query
$users = DB::select('select * from users where active = ?', [1]);
$results = DB::select('select * from users where id = :id', ['id' => 1]);
$affected = DB::update('update users set votes = 100 where name = ?', ['John']);
DB::insert('insert into users (id, name) values (?, ?)', [1, 'Dayle']);
$deleted = DB::delete('delete from users');
DB::statement('drop table users');
使用多個connection時記得要另外寫,例如
DB::connection('log')->select(...);
這邊要提到一個蠻重要的 Transaction
,它的功用就是當我們在執行資料庫內容變更時,控制我們的資料變動是否要真的寫入到DB的一個功能,通常在開發時,如果有多步DB內容更動的操作,會建議加上,這樣萬一出錯時,才不會有部分指令寫入,另一部分卻沒有執行到的狀況。
開始手動處理交易並且完全控制還原或提交
DB::beginTransaction();
提交交易 -->把操作結果真的寫入DB
DB:commit();
還原交易 -->把操作結果還原
DB::rollback();
當然也可以直接在transaction裡面處理,就不用特別寫rollback 或 commit,對於 query builder 和 Eloquent ORM 也有同樣的效果。
DB::transaction(function () {
DB::table('users')->update(['votes' => 1]);
DB::table('posts')->delete();
});
這邊要注意一點,如果需要transaction的db不是
config/database.php
裡面的default db,一樣需要把connection寫上去,不然他只會跑預設的db,範例: DB::connection('mysql_log')->beginTransaction();
結論: 這邊介紹DB facade先帶大家認識基礎的DB操作在laravel是怎麼運行,還有transaction機制的防範,避免意外發生時,資料變動不一致,之後就會介紹Query Builder 與 Eloquent Model。
參考連結: