當我們做一些網站項目的時候,都會遇到這樣一類問題,刪除一個欄目,而這個欄目又不是最底層欄目,也就是說,被刪除的欄目擁有子欄目,這時,我們執行刪除該欄目的命令,就需要將該欄位及其子欄目一併刪除,因為我們不可能讓一個類別的上級欄位被刪除後,子欄位也顯示或存在資料庫中,這時候,欄位刪除的問題就來了。
先上圖:
這是一個簡單的權限管理的頁面,圖中管理員權限為頂層權限,欄位管理為管理員權限的子權限,欄位新增又為欄位管理的子權限,這樣一個三級分類,我們想要達到的效果為:刪除管理員權限,其下方欄位管理、欄位新增權限全被同時刪除;刪除欄位管理權限,則欄位新增也同時被刪除;刪除欄位新增權限則只刪除其本身。
接下來實作方法:
1.是控制器中簡單刪除方法:
1 public function privilege_del(){2 $pri = D('privilege');3 $id = I('id');4 if($pri->delete($id)){5 $this->success('删除权限成功!',U('Privilege/privilege_lst'));6 }else{7 $this->error('删除权限失败!');8 }9 }
2.我們思考,我們想要的同時刪除的結果,其實是當我們選擇上級欄目刪除時,代碼首先幫我們刪除該欄目類別的最底層的子欄目,然後依次向上刪除,最終刪除我們選擇的上級欄目,所以我們需要寫一個前置的建構函式進行操作_before_delete($options) 這是ThinkPHP提供給我們的函數,他的用法是在我們執行刪除方法前,執行這個函數,其中$options為我們要刪除的信息,具體為一個二維數組,當我們把$options dump出來時,結果為:
也就是說,如果我們想要取到這條信息的id值,只需要獲取$options['where']['id']即可,但是注意,如果數組中的where同樣是一個數組的時候,這就意味著我們進行的是批量刪除,這也是單個刪除和批次刪除的差異所在,關於批次刪除,之後我會再寫一篇來簡單介紹,這次我們只寫單一刪除。
首先,寫一個取得所有資料的方法childid,這裡的$priid就是我們傳進去的所要刪除的那一欄的id
1 public function childid($priid){2 $data = $this->select();3 return $this->getchildid($data,$priid);4 }
# 然後根據所有資料查找我們要刪除的欄目的下面的子欄目的id,再次建立一個方法getchildid取得所有需要刪除的id
1 public function getchildid($data,$parentid){ 2 static $ret=array(); 3 foreach ($data as $k => $v) { 4 if($v['parentid']==$parentid){ 5 $ret[]=$v['id']; 6 $this->getchildid($data,$v['id']); 7 } 8 } 9 return $ret;10 }
這裡又用到了遞歸,在所有資料中查詢完下級欄目後,查詢下級欄目的下級欄目,最後將該欄目的所有子欄目的id版存到ret數組中,返回。
最後在建構函式中呼叫
1 public function _before_delete($options){2 //单个删除3 $chilrenids =$this->childid($options['where']['id']);4 $chilrenids = implode(',', $chilrenids); 5 if($chilrenids){6 $this->execute("delete from ed_privilege where id in($chilrenids)");7 }8 }
將取得的id號用逗號隔開,因為此時不能再使用delete方法去刪除數據,若使用則將再次呼叫建構函式成為死循環,所以我們需要在這裡執行SQL語句進行資料刪除。
以上就是單一欄位刪除的全部內容。
以上是刪除一個欄位該如何做?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

TheSecretTokeEpingAphp-PowerEdwebSiterUnningSmoothlyShyunderHeavyLoadInVolvOLVOLVOLDEVERSALKEYSTRATICES:1)emplactopCodeCachingWithOpcachingWithOpCacheToreCescriptexecution Time,2)使用atabasequercachingCachingCachingWithRedataBasEndataBaseLeSendataBaseLoad,3)

你應該關心DependencyInjection(DI),因為它能讓你的代碼更清晰、更易維護。 1)DI通過解耦類,使其更模塊化,2)提高了測試的便捷性和代碼的靈活性,3)使用DI容器可以管理複雜的依賴關係,但要注意性能影響和循環依賴問題,4)最佳實踐是依賴於抽象接口,實現鬆散耦合。

是的,優化papplicationispossibleandessential.1)empartcachingingcachingusedapcutorediucedsatabaseload.2)優化的atabaseswithexing,高效Quereteries,and ConconnectionPooling.3)EnhanceCodeWithBuilt-unctions,避免使用,避免使用ingglobalalairaiables,並避免使用

theKeyStrategiestosigantificallyBoostPhpaPplicationPerformenCeare:1)UseOpCodeCachingLikeLikeLikeLikeLikeCacheToreDuceExecutiontime,2)優化AtabaseInteractionswithPreparedStateTementStatementStatementAndProperIndexing,3)配置

aphpdepentioncontiveContainerIsatoolThatManagesClassDeptions,增強codemodocultion,可驗證性和Maintainability.itactsasaceCentralHubForeatingingIndections,因此reducingTightCightTightCoupOulplingIndeSingantInting。

選擇DependencyInjection(DI)用於大型應用,ServiceLocator適合小型項目或原型。 1)DI通過構造函數注入依賴,提高代碼的測試性和模塊化。 2)ServiceLocator通過中心註冊獲取服務,方便但可能導致代碼耦合度增加。

phpapplicationscanbeoptimizedForsPeedAndeffificeby:1)啟用cacheInphp.ini,2)使用preparedStatatementSwithPdoforDatabasequesies,3)3)替換loopswitharray_filtaray_filteraray_maparray_mapfordataprocrocessing,4)conformentnginxasaseproxy,5)

phpemailvalidation invoLvesthreesteps:1)格式化進行regulareXpressecthemailFormat; 2)dnsvalidationtoshethedomainhasavalidmxrecord; 3)


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。