Question

Je suis en train de configurer CakePHP pour agir comme une API REST pour une application j'écris.

J'ai 3 tables:

dishes {
 id,
 name,
 description
}

users {
 id,
 name,
 email
}

dishes_users {
 id,
 user_id,
 dish_id
}

Je l'aime de sorte que lorsque quelqu'un visite /users/1.xml, les données qui obtient des rendements est juste la liste des « plats » qu'un utilisateur a la table « dishes_users », je ne veux rien d'utilisateurs ou dishes_users d'être là-dedans, juste l'identifiant, le nom et la description de la table plats.

à la fin de la structure XML doit être:

<dishes>
 <dish id="1" name="whatever" description ="This is a description"/>
 <dish id="2" name="whatever" description="This is another description"/>
</dishes>

Il est actuellement la relation que je utilise dans le modèle de l'utilisateur:

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'            => ''
));

Dans le contrôleur i ai:

function view($id) {
    $dishes = $this->User->findAllById($id);
    $this->set(compact('beers'));
}

Cela me donne ce que je veux, mais il me donne aussi beaucoup de choses que je ne veux pas. Tout ce que je besoin est la liste des plats.

Merci pour toute aide, ce qui a été me rend dingue.

Était-ce utile?

La solution

Essayez de limiter la portée un peu. Vous ne mentionnez pas le contrôleur que vous faites ce travail, mais il semble que ce ne sont pas la DishesController. Si, par exemple, il est le UsersController:

$dishes = $this->User->Dish->find( 
  'all', 
  array(
    'fields'     => array( 'Dishes.*' ),
    'conditions' => array( 'DishesUsers.user_id' => $this->id ) // where $this is a user
  )
);

Cela devrait, de la UsersController, tirez uniquement les données plat qui est lié à un utilisateur donné. Je genre de Rattled que hors de la mémoire, mais il peut vous arriver quelque part dans le quartier de ce que vous avez besoin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top