laravel字段排除功能
一、總結
一句話總結:
字段排除功能可以不需要,需要查啥自己手動寫在sql里面
首先你要知道你表里所有的字段,這樣才能進行排除。知道表里的所有字段的方式我能想到的有兩種,一種是寫死在你的 Model 里,還有一種是去數據庫查詢一遍。兩種都有弊端.
第一種寫死,如果你數據庫有添加字段,是需要人工維護到程序里的,這樣跟你自己手動在 Sql 里進行添加沒有什么兩樣了,而且你數據庫里結構發生變化證明有功能變更,這個時候你之前的 Sql 可能也會增加一些排除的字段或者有其他的變更,這樣就要維護兩份數據,不如在變更需求的時候直接變更之前手寫的 Sql.
第二種程序進行查詢,顯然這會讓你每次的查詢 Sql 增加一條,當然你也可以加一個緩存來減少 Sql 的查詢,不過要在數據庫結構發生變更的時候記得清理緩存,否則會出現奇奇怪怪的 Bug.
二、laravel字段排除功能
轉自或參考:ORM 查詢如何排除某個字段?如只排除 content 文本,其它字段都查詢 | Laravel China 社區
https://learnku.com/laravel/t/3975/orm-query-how-to-exclude-a-field-if-only-the-content-text-is-excluded-the-other-fields-are-query
1、問題
ORM 查詢如何排除某些字段?如只排除 content 文本,其它字段都需要。
$data = Content::where('pid',1)->get(['id','title','time', ...]);`
這么寫感覺很笨,有沒有直接排除 content 字段,其它字段都要查詢的方法呢?
2、說明
先說結論:我認為,需要查啥自己手動寫在 Sql 里.
Mysql 並沒有提供排除的查詢方式,所以你要這樣查詢,無論是你人工做這個事兒還是程序自動幫你算出來要查詢的字段,總之是要進行一步轉換的.
那么我們就來說說程序怎么進行轉換.
首先你要知道你表里所有的字段,這樣才能進行排除。知道表里的所有字段的方式我能想到的有兩種,一種是寫死在你的 Model 里,還有一種是去數據庫查詢一遍。兩種都有弊端.
第一種寫死,如果你數據庫有添加字段,是需要人工維護到程序里的,這樣跟你自己手動在 Sql 里進行添加沒有什么兩樣了,而且你數據庫里結構發生變化證明有功能變更,這個時候你之前的 Sql 可能也會增加一些排除的字段或者有其他的變更,這樣就要維護兩份數據,不如在變更需求的時候直接變更之前手寫的 Sql.
第二種程序進行查詢,顯然這會讓你每次的查詢 Sql 增加一條,當然你也可以加一個緩存來減少 Sql 的查詢,不過要在數據庫結構發生變更的時候記得清理緩存,否則會出現奇奇怪怪的 Bug.