2014-11-25 66 views
0

我一直在爲這個問題奮鬥了幾天,最後在本網站上尋求專家和觀衆的意見。設計最佳實踐 - 模型vs控制器與UI - CakePHP,MySQL

  1. 我有兩個表 - 一個是工作流步驟一個模板,另一個是這些所謂的事件工作流程步驟的實例。模板表包含步驟名稱,步驟類型等信息 - 非常通用的信息。事件表包含回到工作流步驟表的一個引用鏈接和一個名爲notes的附加列 - 它存儲用戶在登錄特定工作流程步驟時登錄的數據。工作流程步驟和事件都鏈接到網站上的POST

  2. 工作流程步驟模板可以存在,但尚未發生事件 - 即用戶可能仍處於步驟3或步驟5,並且未記錄步驟1的事件,2,4 - 基本上步驟的順序只是暗示性的,但不具有約束力。工作流程步驟中有一個序列字段,指示它們應該在屏幕上顯示的順序。

  3. 事件也可能在沒有工作流程步驟的情況下發生 - 換句話說,用戶可以在工作流程步驟的上下文之外記錄註釋。這些是通用事件,並直接與POST相關聯

  4. 我能夠成功檢索給定POST的這兩個值 - 它們被檢索爲兩個單獨的數組。我正在使用CakePHP和MySQL

  5. UI需要呈現一個屏幕,以便按順序顯示所有工作流程步驟以及與這些步驟相關或與這些步驟相關的相應事件。屏幕的順序將主要通過工作流步驟的順序,其次由CREATED_DATE對於那些不與特定的工作流程步驟相關的事件來驅動

問題陳述 - 1.我送兩個獨立陣列(如#4所示),並讓UI確定如何交互顯示步驟和事件的複雜邏輯? 2.我是否在控制器中處理步驟和事件的交織,然後向UI發送一個可以循環顯示的簡單數組? 3.我試圖將這個邏輯移動到數據庫,但由於#2和#3中的變化,它變得相當複雜

我在尋求建議,哪一個從設計實踐以及從簡化的觀點。我知道我在這裏給出的圖片有限,但希望本網站上的某個人可能在其他地方遇到過類似的問題。

回答

0

行 - 我已經解決了這一點。我最終將功能移到了模型上。

  1. 我創建了兩個SQL查詢 - 一個檢索所有工作流步驟以及可能與其中每個相關聯的任何事件信息。
  2. 然後,我創建了一個檢索所有那些獨立的,不與任何特定的工作流步驟
  3. 我使用UNION ALL堆棧他們彼此
  4. 我用一種頂部相關聯的事件第二個SQL修改日期和序號,以便所有的步驟和事件按時間順序和順序出現

然後,我將此從模型傳遞到視圖(通過控制器),並讓視圖迭代並顯示元素。這種方法實際上極大地簡化了我的View和Controller代碼,甚至Model代碼也非常簡單,因爲它全部是一個帶參數的查詢語句。

0

根據你給用戶分配事件的方式,我會在Event to Workflow中建立一個hasOne關係。您需要爲您的用戶提供另一種關係,hasOne或hasMany。

$hasOne = 'Workflow'; 

很明顯,這意味着您的Event表會有一個名爲wordflow_id的列,並且會與工作流中的單個行相關聯。在控制器中,我會用用戶來調用事件。

$this->Event->findAllByUserId($user_id); 

這應該爲您提供一個可能看起來像這樣的數組。

array(
    [0] => array(
     [Event] => array(
      'id' => 1, 
      'name' => 'blah', 
      ... 
     ), 
     [User] => array(
      'id' => 1, 
      'name' => 'Charles', 
      ... 
     ), 
     [Workflow] => array(
      [0] => array(
       'id' => 1, 
       'name' => 'more blagblagblag', 
       ... 
      ), 
      [1] => array(
       'id' => 9, 
       'name' => 'sblagblsagblag', 
       ... 
      ), 
      [2] => array(
       'id' => 42, 
       'name' => 'mordse d', 
       ... 
      ) 
     ) 
    ) 
) 

呼叫你所有的工作流模板

$this->Workflow->find('all'); 

那我就用戶蛋糕的內置SET ::功能打印工作流模板在您的視圖,並使用你的事件調用以填充數據。

請發佈更多詳細信息和您的代碼,模型等,我相信我們可以爲您提供實現此目的所需的確切查詢/邏輯。

http://book.cakephp.org/2.0/en/core-utility-libraries/set.html

+0

我想你誤解了我的問題。我可以根據需要使用'find'方法檢索所有數據。然而,我的問題是圍繞設計考慮 - 即嵌入處理功能 - 控制器或視圖 - 儘管找到了答案 - 謝謝 – ChicagoSky 2014-11-27 05:39:11