我想配置CakePHP中充当REST API一个程序,我正在写。

我有3个表:

dishes {
 id,
 name,
 description
}

users {
 id,
 name,
 email
}

dishes_users {
 id,
 user_id,
 dish_id
}

我想这样,当有人访问/users/1.xml,是可以获得回报的数据仅仅是“菜”,一个用户在“dishes_users”表名单,我不想从用户任何东西,或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'));
}

这给了我我想要的,但它也给了我很多东西,我不想。我需要的是菜肴列表中。

感谢您的帮助,这已被我发疯。

有帮助吗?

解决方案

尝试对范围的限制位。你没有提到你正在做这项工作的控制器,但它看起来像它的不是的的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,拉只的关联于给定用户的数据盘。我有点慌乱,从存储断开,但也可能让你在某处你所需要的附近。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top