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,他就會變更為集合實例,就只能鏈結集合可以用的方法了。