我在这样的操作中使用 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_groups。我正在将 find('all') 的输出序列化为 Xml 以用于视图中的 REST Api。问题是数据包含嵌套在我的“组”数组中的额外“组用户”数组。Api 的用户不需要知道连接表信息,所以我想删除它。当前输出如下所示:
索引.ctp
<?php
//debug($users);
$xml = Xml::build($users, array('return' => 'domdocument'));
echo $xml->saveXML();
?>
index.ctp 的输出 -> http://www.pastie.org/2789367
看到 GroupsUser 标签嵌套在 Group 标签中了吗?这就是我要删除的内容。如果没有一个很好的简单方法来做到这一点,我将使用视图中的一些循环手动构建 xml,或者在模型中创建我自己的 find 方法并在 GroupsUser 上使用 unset()。这两种解决方案都不理想,所以我希望这里有人有更好的解决方案。:)