簡體   English   中英

如何使用PHP為數據庫創建動態字段

[英]How to create dynamic field for a database using PHP

我有一個編寫的多客戶端級別的PHP應用程序。 像任何其他PHP應用程序一樣,此應用程序具有許多數據庫對象。 但是由於它是一個多客戶端級別的應用程序,所以每次我們聘用新客戶端時,我都有不同的客戶端要求。 有幾個共同的對象(又名帳戶)托管着大多數客戶信息。 但最重要的是,每次我想向數據庫中添加新客戶端時,此新客戶端都需要在已添加的帳戶數據庫中添加新列,因為它們將具有一些唯一數據。 有標准的必填數據(即account_name,status ...),但是某些數據是唯一的,並且根據客戶業務類型而被標記為不同。

目前,我要做的就是滿足要求

  1. 更改帳戶表並手動添加此新列。
  2. 編輯我在其中顯示帳戶信息並顯示字段內容的PHP腳本,如下所示

    if(!empty($ row ['new_filed']))echo'單個客戶端必填字段:'。 $行[ 'new_filed'];

  3. 如果該字段是可編輯的,那么在保存之前,我必須向編輯/添加表單中添加規則以進行數據驗證檢查。

我正在嘗試構建一個前端工具,該工具將自動為我執行此操作。 這樣,我可以讓管理員“不是程序員”使用前端工具並添加一個新字段,該字段將顯示在所選頁面的所選部分中。

在前端工具中,我想說的是添加一個名為“ brand_c”的自定義字段,並使其類型為varchar(100)。 然后,僅在客戶端=“ XYZ”的情況下,在“其他”部分中名為“ account_info.php”的頁面上才顯示帶有標簽“品牌”的字段,因此,如果數據屬於客戶端“ ABC”,則不會顯示數據,因為此列僅針對“ XYZ”自定義。

我知道這是一個廣泛的問題,但是我正在尋找的是如何構建這樣的東西的幫助(從何而來?)。 這是大多數大型CRM所做的事情(即Microsoft CRM Dynamic,Salesforce.com ...)。我該如何構建類似的東西?

謝謝

您需要做的第一步是正確設計表,因此基本上您需要知道如何設計表以支持動態字段,並且該字段將能夠驗證/處理此類數據。

我對應用程序(可在應用程序的admin中配置UI字段的動態應用程序)所做的工作是將配置保存在數據庫中,每次發生事務時,頁面將獲取所選記帳器的配置,並將生成必填字段。 提交表單后,應用程序將再次獲取配置並根據client_field中的設置進行驗證

帳戶表*包含帳戶等信息

  • account_id //此表的主鍵
  • 用戶名
  • 帳戶狀態

客戶表

  • client_id //此表的主鍵
  • account_id //外鍵:賬戶表
  • 客戶名稱
  • client_status

您可以根據需要為客戶端添加不同的列,但請確保不要在此表中添加必需的UI字段,而是創建如下表

client_field表//將包含可以定義/配置的表

  • field_id //此表的主鍵
  • client_id //外鍵:客戶表
  • field_name //將出現在用戶界面中的字段名稱
  • field_title //在鼠標懸停在字段上時顯示
  • field_datatype //可以是文本,整數,日期,布爾值等
  • field_type //字段輸入類型:可以是文本框,日期選擇器,下拉列表等
  • field_required //標志,指示是否需要該字段
  • field_display //指示該字段是否將在用戶界面中顯示/隱藏的標志
  • field_defaultvalue //頁面渲染時設置的默認值
  • field_minvalue //該字段將接受的最小值:僅當dataytpe為整數/雙精度時可接受
  • field_maxvalue //與field_minvalue描述相同,但它將檢查最大整數/雙精度值
  • field_maxlength //字段的最大長度
  • field_order //界面中字段的順序
  • 字段狀態//激活或停用字段

您可以添加其他列,但是您需要確保它是流暢的而不是多余的。

假設您有field_type下拉列表,需要創建另一個表,讓我們稱之為

field_dropdown

  • id //此表的主鍵
  • field_id // client_field中的外鍵
  • dropdown_value //選擇時將在下拉列表中使用的值
  • dropdown_description //將顯示在下拉列表中的描述
  • dropdown_order //商品的順序
  • dropdown_status //標記此記錄是否處於活動狀態

您可能想知道在這種情況下如何保存數據,數據必須保存在另一個表中,讓我們稱之為

client_information

  • id //此表的主鍵:
  • client_id //來自客戶表的外鍵
  • field_id // client_table中的外鍵。
  • value //來自用戶界面的值

這樣,當您保存新客戶端時,client_field中的每個字段都會在client_information表中添加新行以及用戶插入的值

設計此類應用程序時面臨的挑戰是:

  • 很難開發(很多條件和映射,並且需要很多時間)
  • 您將需要正確配置字段以使其正常工作
  • 正確的系統設計,架構和流程,否則會破壞系統的動態性
  • 您將需要適當的文檔,以便您了解哪個。
  • 該過程對於所有客戶端都是線性的,除非您可以通過將自己的流程保存到數據庫中來更改自己的流程

該設計的優點是:

  • 完成后,除了軟件增強功能(例如發行時不支持的功能)外,您不再需要開發人員添加其他代碼。
  • 該應用程序將是動態的,並且可以通過管理模塊輕松且可維護地添加任何字段

我並不是說這是必須做的,但這是我對如何開發需要動態數據字段的應用程序的建議,到目前為止,根據我的開發經驗,只要設計和開發良好,它就可以很好地工作。

您可以創建一個新表(例如extra_data ,而不是將其他字段作為新列添加到accounts表中,例如,使用account_iddata_labeldata_content列。 這樣,您可以將每個帳戶的額外數據保存到該表中,然后在account_info.php中進行獲取。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM