2011-06-01 32 views
0

我有表格項目,截圖,sub_screenshot和用戶
我想實現這種圖。就像獲得第四級一樣。
使用關係在CakePHP中顯示數組的第4層

[Model]  
    Array 
       (
        [0] => Array 
         (
          [Project] => Array 
           (
            [id] => 2 
           ) 
          [Screenshot] = Array 
           (
            [0] => Array 
             (
              [Screenshot] => Array 
                (
                [project_id] => 2 
                [id] => 1 
               ) 
              [SubScreenshot] = Array 
                (
                 [0] => Array 
                   (
                    [id] = 1 
                    [project_id] = 2 
                    [screenshot_id] = 1 
                   ) 
                 [1] => Array 
                   (
                    [id] = 2 
                    [project_id] = 2 
                    [screenshot_id] = 1 
                   ) 
               ) 

             ) 
            [1] => Array 
             (
              [Screenshot] => Array 
                (
                [project_id] => 3 
                [id] => 1 
               ) 
              [SubScreenshot] = Array 
                (
                 [0] => Array 
                   (
                    [id] = 1 
                    [project_id] = 3 
                    [screenshot_id] = 1 
                   ) 
                 [1] => Array 
                   (
                    [id] = 2 
                    [project_id] = 3 
                    [screenshot_id] = 1 
                   ) 
                 [2] => Array 
                   (
                   [id] = 2 
                   [project_id] = 3 
                   [screenshot_id] = 1 
                  ) 
               ) 

             ) 
          ) 
          [User] => Array 
          (
            [id] => 1 
          ) 
        ) 
       ) 

問候,

回答

0

使用可容納的行爲。我最近也有一些關於它的問題。將遞歸設置爲4會更有效率,因爲只會包含所需的模型。

按照以下說明設置模型上的行爲。 http://book.cakephp.org/view/1323/Containable

然後,您應該能夠執行查找並獲得所需的結構。

$this->Project->find(
    'all', 
    array(
     'conditions' => array(
      //put your conditions in here 
     ), 
     'contain' => array(
      'User', 
      'Screenshot', 
      'Screenshot.SubScreenshot' 
      'Scrrenshot.SubScreenshot.User' 
    ) 
); 

有幾種使用模型語法的方法。您可以將數組添加到包含的模型中,以添加條件和/或更深度。

+0

我已經嘗試了可容納但它只在第三深度顯示{SubScreenshot}。我想將它顯示爲{Screenshot array},所以它會是{array(Project => array(Screenshot => array(SubScreenshot),User)} not {array(Project => array(Screenshot,SubScreenshot,User))} – Harold 2011-06-02 03:35:36

+0

這一切都取決於你的模型如何關聯如果截圖hasMany subscreenshot那麼可容納的行爲將做到這一點我將編輯帖子以獲得subscreenshot的用戶 – 2011-06-02 03:38:54

+0

我已經得到它了我包括var $ actsAs = array ('Containable');在Project模型中包含SubScreenshot在屏幕截圖模型中。謝謝! – Harold 2011-06-02 03:41:44

0

給你一些想法,我建議你使用afterFind()回調

http://book.cakephp.org/view/1050/afterFind

後,找到設置,無論你想使另一個找到與用戶用戶模型。

我不知道是否存在任何配置來修改$recursive而不修改核心。

編輯

您可以創建在AppModel一個通用的一個afterFind時,你可以檢查,如果你有$遞歸= 4,複製關係的核心功能和生成它們。