0

我正在尝试将 CakePHP 配置为我正在编写的应用程序的 REST API。

我有 3 张桌子:

dishes {
 id,
 name,
 description
}

users {
 id,
 name,
 email
}

dishes_users {
 id,
 user_id,
 dish_id
}

我希望这样,当有人访问 /users/1.xml 时,返回的数据只是用户在“dishes_users”表中的“菜肴”列表,我不希望用户或 disc_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'));
}

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

感谢您的帮助,这一直让我发疯。

4

1 回答 1

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仅提取与给定用户相关的菜肴数据。我有点把它从记忆中剔除,但它可能会让你在你需要的东西附近的某个地方。

于 2010-02-01T01:53:42.773 回答