CakePHP 2.0-如何从containable中删除连接表

CakePHP 2.0-如何从containable中删除连接表,cakephp,cakephp-2.0,Cakephp,Cakephp 2.0,我在这样的操作中使用Containable: public function index() { $this->User->recursive = -1; $this->User->Behaviors->load('Containable'); if ($this->RequestHandler->accepts('xml')) { $this->set('users', array("Users"

我在这样的操作中使用Containable:

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\U groups。我正在将find('all')的输出序列化为视图中RESTAPI的Xml。问题是数据包含嵌套在我的“Groups”数组中的额外“GroupsUser”数组。Api的用户不需要知道联接表的信息,所以我想删除它。当前输出如下所示:

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());
    }
}
index.ctp

<?php
    //debug($users);

    $xml = Xml::build($users, array('return' => 'domdocument'));
    echo $xml->saveXML();
?>
“domdocument”);
echo$xml->saveXML();
?>
index.ctp的输出->


是否查看嵌套在组标记中的GroupsUser标记?这就是我想删除的内容。如果没有一种简单易行的方法,我将在视图中使用一些循环手工构建xml,或者在模型中创建自己的find方法,并在GroupsUser上使用unset()。这两种解决方案都不理想,所以我希望这里的人有更好的解决方案。:)

I如果您确信所有操作都是在联接中完成的(仅属于关联),那么您可以将containable组件与autofields一起使用,例如

$this->Post->Behaviors->attach('Containable', array('autoFields' => false));
(这是为了将其动态连接到控制器部件中

如果您的查找具有多个关联,那么您将有2个查询,而不是cake需要获取此字段以进行联接。在这种情况下,您也可以使用可链接组件,将所有内容放入联接中,而不是大量查询,从而使您有机会仅选择所需的字段


这是一个链接,用于

我之所以拥有联接表,是因为它是一种HABTM关系。我尝试了linkable,但没有留下深刻印象。实际上,这是一种更简单的方法,可以使用find()选项中的“联接”功能。我认为不加入users\u groups表就无法获取数据。不过,感谢您的回复。