Pregunta

Estoy intentando configurar CakePHP para actuar como una API REST para una aplicación que estoy escribiendo.

Tengo 3 tablas:

dishes {
 id,
 name,
 description
}

users {
 id,
 name,
 email
}

dishes_users {
 id,
 user_id,
 dish_id
}

Me gustaría para que cuando alguien /users/1.xml visitas, los datos que se vuelve es sólo la lista de los 'platos' que un usuario tiene en la tabla '' dishes_users, yo no quiero nada de usuarios o dishes_users a estar ahí, sólo la identificación, el nombre y descripción de la tabla platos.

al final la estructura XML tiene que ser:

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

Esta es actualmente la relación que estoy utilizando en el modelo de los usuarios:

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

En el controlador que tengo:

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

Esto me da lo que quiero, pero también me da un montón de cosas que no quiero. Toda la necesidad i es la lista de platos.

Gracias por cualquier ayuda este contenido está volviendo loco.

¿Fue útil?

Solución

Trate de limitar el alcance un poco. Usted no menciona el controlador que está haciendo este trabajo, pero todo apunta a que no es el DishesController. Si, por ejemplo, es el UsersController:

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

Esto se debe, desde el UsersController, tire sólo los datos de plato que está relacionado con un usuario determinado. Yo como que sacudí que fuera de la memoria, pero puede llegar a algún lugar en las proximidades de lo que necesita.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top