前幾天我們完成惹user跟skill的ajax的前端界接服務
並且有成功更新資料進資料庫
今天我們來閒聊一下
順便來學怎麼用laravel的Query Builder
先說說為什麼我會想講Query Builder
目的如下:
這個不用再多做描述了吧!
不管是個人租用的主機做side project來改善資料庫效能
或是你在一間公司甚至是大公司要Performance Performance Performance !!
老闆表示很重要所以講三次
(還有你個人業績或是KPI或OKR)
這個應該是對工程師來說最主要的目的
如果以前的我為了過濾掉一個條件
我可能會先把資料從資料庫全撈在用刪去法
把每個物件都查找一遍做刪除再回傳給前端
但這不但很耗損效能又很浪費時間
想說該長大惹來學點東西增進自己
在我的交易系統裡面
我希望除了可以自己新增技能外
會有別人可以對你技能的評分
這個目的是給予你的技能一個基數
來驗證你這項技能的價值
(比如說你會英文 會的程度在哪?多益500會英文?還是700 ? 900 ?)
當然評分機制也有許多的細節可以討論
我目前方向是除了自己以外的所有技能都可以評分並且希望只能評一次!!
在未來幾天我會力一個評分對應表
有了基本分數的技能 就可以跟其他使用者做交換
那如果透過$$交換會透過永豐api的形式
今天比較像是聊天形式來確定未來7天要做的事情
今天目的很簡單我們只有兩個事情要做
首先先讓大家看查找全部資料
接者我們針對特定使用者做篩選
情境1 找到所有技能
情境2 除了使用者ID為2。也就是前幾天建的admin使用者外所有的技能我都要撈出來!
之前我們找技能是利用定義model一對多的方式來查找
接者我們來用看看laravel靜態function查到所有技能吧
在SkillControllrt裡面
public function index()
{
$Skills = Skill::all();
return view('skill.index', ['skills' => $Skills]);
}
這個Skill呼叫靜態CLASS再透過all()會把所有的skill資料倒出來
如這張圖
這樣中文講起來有點怪怪的
其實就是以前數學學到的邏輯部分
我們A跟B的區塊重疊後
我們要找到只屬於B的資料
我們可以參考數學 關係代數的含意
來源www.sqlsplus.com
我們要去各種關係的資料要怎麼查找
就是sql語句的好處
好的sql語句可以改善效能並且過濾掉不要的資料欄位喔!
程式碼改成
public function index()
{
$Skills = Skill::query()
->where('user_id', '!=', 2)
->get();
return view('skill.index', ['skills' => $Skills]);
}
我們就可以針對除了admin使用者外的來做篩選摟(admin為id 2)
雖然看起來很簡單
不過卻展示了如何透過query builder來找到篩選後的使用者
今天做的篩選目的是要讓其他人評分技能
並且自己不能對自己評分才做的
大家也可以看看練習不同情境下
其他的filter 跟query builder語句喔