2010-01-31 97 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,扳指的有關給定用戶只菜的數據。我從記憶中發現了這種感覺,但它可能會讓你處於你所需要的地方。