首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CakePHP关系问题

CakePHP关系问题
EN

Stack Overflow用户
提问于 2010-02-01 06:52:15
回答 1查看 130关注 0票数 0

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

我有3张桌子:

代码语言:javascript
复制
dishes {
 id,
 name,
 description
}

users {
 id,
 name,
 email
}

dishes_users {
 id,
 user_id,
 dish_id
}

我希望当有人访问/ users /1.xml时,返回的数据只是用户在' dishes_users‘表中的’菜品‘列表,我不希望来自用户或dishes_users的任何内容都在其中,只需要菜单表的id、名称和描述。

最后,xml结构必须是:

代码语言:javascript
复制
<dishes>
 <dish id="1" name="whatever" description ="This is a description"/>
 <dish id="2" name="whatever" description="This is another description"/>
</dishes>

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

代码语言:javascript
复制
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'            => ''
));

在控制器中,我有:

代码语言:javascript
复制
function view($id) {
    $dishes = $this->User->findAllById($id);
    $this->set(compact('beers'));
}

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

谢谢你的帮助,我都快疯了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-02-01 09:53:43

尝试限制一下作用域。您没有提到要在其中执行此工作的控制器,但看起来它不是DishesController。例如,如果是UsersController

代码语言:javascript
复制
$dishes = $this->User->Dish->find( 
  'all', 
  array(
    'fields'     => array( 'Dishes.*' ),
    'conditions' => array( 'DishesUsers.user_id' => $this->id ) // where $this is a user
  )
);

这应该只从UsersController中提取与给定用户相关的dish数据。我有点记不住了,但它可能会让你找到你需要的东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2173724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档