2010-01-31 126 views
0

我正在尝试将CakePHP配置为充当我正在编写的应用程序的REST API。CakePHP关系问题

我有3个表:

dishes { 
id, 
name, 
description 
} 

users { 
id, 
name, 
email 
} 

dishes_users { 
id, 
user_id, 
dish_id 
} 

我想它,这样,当有人访问/users/1.xml,是可以获得回报的数据仅仅是的“菜”,用户在列表'dishes_users'餐桌,我不想要任何来自用户或菜肴的用户在那里,只是餐具的ID,名称和描述。

到底

XML结构必须是:

<dishes> 
<dish id="1" name="whatever" description ="This is a description"/> 
<dish id="2" name="whatever" description="This is another description"/> 
</dishes> 

这是目前我使用中的用户模型中的关系:

var $hasAndBelongsToMany = array(
    "Dish" => array(
     'className' => 'Dish', 
     'joinTable' => 'dishes_users', 
     'foreignKey' => 'user_id', 
     'associationForeignKey' => 'dish_id', 
     'unique'     => true, 
     'conditions'    => '', 
     'fields'     => '', 
     'order'     => '', 
     'limit'     => '', 
     'offset'     => '', 
     'finderQuery'   => '', 
     'deleteQuery'   => '', 
     'insertQuery'   => '' 
)); 

在控制器我有:

function view($id) { 
    $dishes = $this->User->findAllById($id); 
    $this->set(compact('beers')); 
} 

这给了我我想要的,但它也给了我很多我不想要的东西。我需要的是菜单清单。

感谢您的任何帮助,这一直使我疯狂。

回答

1

试着限制一下范围。你不提到你正在做这项工作的控制器,但它看起来像它不是DishesController。如果,例如,它的UsersController

$dishes = $this->User->Dish->find( 
    'all', 
    array(
    'fields'  => array('Dishes.*'), 
    'conditions' => array('DishesUsers.user_id' => $this->id) // where $this is a user 
) 
); 

这应该从UsersController,扳指的有关给定用户只菜的数据。我从记忆中发现了这种感觉,但它可能会让你处于你所需要的地方。