如果決定使用某個框架,我就盡量使用該框架的慣用方式,以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工具,你就可以根據該查詢情境,來決定最適合的工具是哪一個,用以解決你的問題。
使用 ORM
or builder
都是希望你能盡量不要直接寫 raw sql
這在團隊上,每個人程度不一樣,透過限制寫法,可以達到一樣的效果sql
語法交由框架去組合,只需要站在巨人的肩膀上開發即可
開發框架的團隊會幫你寫出最合適的語法
另一方面,日後要更換資料庫也只要透過設定即可切換
雖然在實務上其實很少需要更換資料庫
如果你是用原生語法來取資料,後續可能要因應不同的資料庫去做切換
因此我個人認為,使用 ORM
or builder
的方式,好處非常多
除非遇到特殊需求,無法用上述兩個方式取得資料,我才會考慮使用原生語法
以上一點想法提供你參考
請問各為大神們如何看待這件事情
既然都學 Laravel (不用原生 PHP)
那當然選擇 Eloquent ORM 了
要學框架就學到底
工作上又是如何選擇的呢?
如果主管有規定,依主管的規定即可
如果主管沒規定,或是開放讓員工自由選擇,就選第一種「原生 SQL 查詢」
正常我會建議你直接使用 Eloquent ORM
但學習 ORM 算一件辛苦的事。
畢竟它得拖離原本使用SQL語法的習慣。
改成物件應用導向的方式。
有些人真的沒辦法。
其實我的SQL對應語法本身也算了解到一定的程度。
但在一開始碰ORM時,著實痛苦了一段時間。
甚至有算了,就直接用DB好了。
但還是勉強自已用 ORM 的習慣,經曆了一個多月的時間。
才了解其美妙之處。
現在已經換,覺得寫SQL語法是一件很麻煩的事了。ORM那麼方便簡單。規劃又單純
還自已找麻煩寫SQL。