2011-10-31 43 views
0

表中像這樣的動作:CakePHP的2.0 - 如何刪除加入我使用中可容納來自中可容納

public function index() 
{ 
    $this->User->recursive = -1; 
    $this->User->Behaviors->load('Containable'); 

    if ($this->RequestHandler->accepts('xml')) 
    { 
     $this->set('users', array("Users" => array("UserEntry" => $this->User->find('all', 
      array(
       'fields' => array('User.id','User.username', 'User.email', 'User.created', 'User.modified'), 
       'contain' => array(      
        'Group' => array(
         'fields' => array('Group.id','Group.name','Group.created'), 
        ) 
       ) 
      )    
     )))); 
    } 
    else if ($this->RequestHandler->accepts('json')) 
    { 
    } 
    else if ($this->RequestHandler->accepts('html')) 
    { 
     $this->set('users', $this->paginate()); 
    } 
} 

它得到我需要的所有數據,但有一兩件事,我不能弄清楚。用戶和組之間有一個HABTM關係,並且有一個連接表users_groups。我將視圖中的find('all')輸出序列化爲Xml中的REST Api。問題是數據包含嵌套在我的「組」數組中的額外'GroupsUser'數組。 Api的用戶不需要知道連接表信息,所以我想刪除它。電流輸出是這樣的:

index.ctp index.ctp的

<?php 
    //debug($users); 

    $xml = Xml::build($users, array('return' => 'domdocument')); 
    echo $xml->saveXML(); 
?> 

輸出 - >http://www.pastie.org/2789367

見嵌套在組標籤的GroupsUser標籤?這是我想要刪除的。如果沒有一個簡單的方法可以做到這一點,我將使用視圖中的一些循環手動構建xml,或者在模型中創建我自己的find方法,並在GroupsUser上使用unset()。這兩種解決方案都不理想,所以我希望這裏有人有更好的解決方案。 :)

回答

0

我你是積極的,一切都在一個連接(僅屬於關聯協會)正在做的,你可以使用與autofields的中容納組件假像這樣

$this->Post->Behaviors->attach('Containable', array('autoFields' => false)); 

(這是dynamiclly其附加在控制器部分

如果你發現有hasMany關聯,你將有2個查詢,而不是如此蛋糕需要獲取這個字段來完成連接,你也可以使用可鏈接組件來處理這個事件,加入而不是很多查詢給你機會只選擇你想要的領域。

這裏是一個鏈接linkable component

+0

我有連接表的原因是因爲它是一個HABTM關係。我試過鏈接,但沒有留下深刻的印象。真的只是一個更簡單的方法來使用find()選項中的「連接」功能。我不認爲沒有加入users_groups表就可以獲得數據。儘管謝謝你的迴應。 – dubvfan87