iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 25
1

介紹

laravel 目前支援這四種database

  • MySQL
  • PostgreSQL
  • SQLite
  • SQL Server

設定方式

config/database.php 要注意一下 default是設定 mysql,接著在connection就可以看到有上面提到的四種connection方法,其他還有像redis的資料也會在這邊。

之前提到的.env別忘了也要設定喔

基本用法

DB facade 提供了幾種方法來query

select

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

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

update

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

insert

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

delete

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

statement

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

使用多個connection時記得要另外寫,例如DB::connection('log')->select(...);

DB Transaction

這邊要提到一個蠻重要的 Transaction,它的功用就是當我們在執行資料庫內容變更時,控制我們的資料變動是否要真的寫入到DB的一個功能,通常在開發時,如果有多步DB內容更動的操作,會建議加上,這樣萬一出錯時,才不會有部分指令寫入,另一部分卻沒有執行到的狀況。

Transactions(交易) 相關指令

開始手動處理交易並且完全控制還原或提交

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。

參考連結:


上一篇
Day24-[DB 操作] Tinker
下一篇
Day26-[DB 操作] Query Builder 介紹
系列文
30天快速上手Laravel30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言