2010-01-31 4 views
0

Я пытаюсь настроить CakePHP как API REST для приложения, которое я пишу.CakePHP Вопрос о взаимоотношениях

У меня есть 3 таблицы:

dishes { 
id, 
name, 
description 
} 

users { 
id, 
name, 
email 
} 

dishes_users { 
id, 
user_id, 
dish_id 
} 

я хотел бы его так, что когда кто-то посещает /users/1.xml, данные, которые получает возвращается только список «блюд», которые пользователь имеет в таблица «dish_users», я не хочу ничего от пользователей или тарелок, которые будут там, только идентификатор, имя и описание таблицы блюд.

в конце концов структура 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, тянуть только блюдо данные, которые связанные с данным пользователем. Я как бы загремел это от памяти, но это может привести вас где-то в районе того, что вам нужно.