2019鐵人賽
Laravel
database
query builder
延續昨天的話題,Laravel 為了簡化 sql 語法,把 sql 搜尋指令( ex: select
、insert
、update
、delete
...) 設置成「查詢建構器」 Builder
底下的方法,而我們在 DB
facade 上使用 table()
就會回傳一個 Builder
實例,所以我們就可以利用這些方法下達 sql 指令。
除了簡化語法之外,我們也可以透過「鏈結語法」繼續下達查詢指令。
說的有點抽象,我們直接看下去吧。
查詢建構器最大的好處就是簡化了查訪資料庫的語句,也就是不用再寫一堆煩人 sql 語句。
// 連線到資料庫,使用原生 sql 語法才需要
DB::connection('mysql');
//取得資料
//原生 sql 語法
$users = DB::select('select * from users);
//使用查詢建構器
$users = DB::table('users')->get();
Illuminate\Support\Collection
(集合)實例,每個都是 PHP StdClass
物件。集合
,所以如果資料想再作處理,可以直接在用集合的鏈結語法處理資料,例如 pluck
chunk
...stdClass
,所以可以把存取的欄位當作物件的一個屬性來存取每個欄位的值For Example:
$users = DB::table('users')->where('id', '>', 0)->get();
使用「鏈結語法」的時候就要特別注意,現在是還在「查詢建構器」裡面,還是已經取得結果了,這決定了後面可用的「鏈結語法」為何。
以上面的例子來看到 where
語句結束時都還屬於下達搜尋指令,也就是還在 Builder
裡面,也就是說我們可以繼續鏈結 where
、 join
、 orderBY
...等方法。
但是一但鏈結了 get
,他就會變更為集合實例,就只能鏈結集合可以用的方法了。