iT邦幫忙

2

學習Laravel時遇到SQL查詢選擇的障礙

  • 分享至 

  • xImage

最近在學習後端框架 Laravel 遇到一個問題!! 就是如何選擇適當的SQL查詢方式
我們知道大至上Laravel可分為以下這三種查詢方法
1.原生 SQL 查詢 例: DB::select('select* from table_name')
2.查詢建構器 例: DB::table('table_name')->get()
3.Eloquent ORM 例: ModelName:all()

我一直以來都是選擇第一種,原因是想熟悉sql語法,
但是又看到很多網路文章都是使用第3種。

請問各為大神們如何看待這件事情 ,工作上又是如何選擇的呢?

小魚 iT邦大師 1 級 ‧ 2022-03-27 20:14:29 檢舉
小孩子才做選擇!
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
3
grimmq52156
iT邦新手 5 級 ‧ 2022-03-26 15:54:48
最佳解答

如何看待這件事

如果決定使用某個框架,我就盡量使用該框架的慣用方式,以Laravel來說,能用ORM就不寫Raw SQL,優點是網路上大家分享的該框架的資源(不論是第三方套件、教學文或是問題解答文),通常也是會使用框架的慣用方式,你理解起來比較快。缺點是你得付出該慣用方式的學習成本,但選擇某個框架也意味著你預期會付出該框架的學習成本,ORM的學習成本我認為是可接受的。
你說你想熟悉sql的寫法,沒問題!你可以在寫完ORM後,用Laravel的toSQL與getBindings函式輸出ORM的sql結果,藉此熟悉sql的語法,具體方式可以參考 How do I get the query builder to output its raw SQL query as a string?

工作上如何選擇

如果你一個人寫程式,其實你想怎麼做都可以,沒什麼影響;如果你覺得你想要藉此熟悉sql語法,對ORM怎麼用沒有興趣,那的確沒必要逼自己學ORM。
如果你是團隊寫程式,每個團隊有自己的程式寫作規範,當團隊規範(假設該團隊只寫Raw SQL)與框架慣用方式(ORM為主,Raw SQL為輔)衝突時,優先使用團隊規範。若你發現該框架某些慣用方式比目前團隊的規範更合適,可以與團隊討論是否調整團隊規範。

小結論

每個框架會採用某個慣用寫法(例如Laravel使用ORM),都會有它的優點與適用情境,去深入了解它不虧,你深入了解框架的某個慣用寫法,就好比是在自己的工具箱內放新的工具,之後遇到問題情境的時候,你就多了一個工具可以選擇。如果你同時學習ORM與Raw SQL,學習成本雖然會增加,但在未來碰到查詢相關情境時,你手上同時有ORM工具與Raw SQL工具,你就可以根據該查詢情境,來決定最適合的工具是哪一個,用以解決你的問題。

2
Han
iT邦研究生 1 級 ‧ 2022-03-25 16:07:24

使用 ORM or builder 都是希望你能盡量不要直接寫 raw sql
這在團隊上,每個人程度不一樣,透過限制寫法,可以達到一樣的效果
sql 語法交由框架去組合,只需要站在巨人的肩膀上開發即可
開發框架的團隊會幫你寫出最合適的語法

另一方面,日後要更換資料庫也只要透過設定即可切換
雖然在實務上其實很少需要更換資料庫

如果你是用原生語法來取資料,後續可能要因應不同的資料庫去做切換

因此我個人認為,使用 ORM or builder 的方式,好處非常多
除非遇到特殊需求,無法用上述兩個方式取得資料,我才會考慮使用原生語法

以上一點想法提供你參考

1
海綿寶寶
iT邦大神 1 級 ‧ 2022-03-25 16:30:45

請問各為大神們如何看待這件事情

既然都學 Laravel (不用原生 PHP)
那當然選擇 Eloquent ORM 了
要學框架就學到底

工作上又是如何選擇的呢?

如果主管有規定,依主管的規定即可
如果主管沒規定,或是開放讓員工自由選擇,就選第一種「原生 SQL 查詢」

3

正常我會建議你直接使用 Eloquent ORM
但學習 ORM 算一件辛苦的事。

畢竟它得拖離原本使用SQL語法的習慣。
改成物件應用導向的方式。
有些人真的沒辦法。

其實我的SQL對應語法本身也算了解到一定的程度。
但在一開始碰ORM時,著實痛苦了一段時間。
甚至有算了,就直接用DB好了。

但還是勉強自已用 ORM 的習慣,經曆了一個多月的時間。
才了解其美妙之處。

現在已經換,覺得寫SQL語法是一件很麻煩的事了。ORM那麼方便簡單。規劃又單純
還自已找麻煩寫SQL。

1
小魚
iT邦大師 1 級 ‧ 2022-03-27 20:13:10

既然用了Laravel,
那就用ORM吧.
不過學習SQL語法還是需要的.

sara167
iT邦見習生 ‧ 2022-03-31 13:01:20
【**此則訊息已被站方移除**】

我要發表回答

立即登入回答